road curvness scales with road length
This commit is contained in:
@@ -298,7 +298,11 @@ func calculateRoadPath(start, end *PointOfInterest, curvyness, avgDim float64, r
|
|||||||
return []image.Point{{X: start.X, Y: start.Y}}
|
return []image.Point{{X: start.X, Y: start.Y}}
|
||||||
}
|
}
|
||||||
|
|
||||||
if curvyness == 0 {
|
// Adjust curviness based on distance
|
||||||
|
distanceFactor := math.Min(1.0, dist/(avgDim*0.5))
|
||||||
|
adjustedCurvyness := curvyness * distanceFactor
|
||||||
|
|
||||||
|
if adjustedCurvyness == 0 {
|
||||||
return bresenhamRoad([]image.Point{{X: start.X, Y: start.Y}, {X: end.X, Y: end.Y}})
|
return bresenhamRoad([]image.Point{{X: start.X, Y: start.Y}, {X: end.X, Y: end.Y}})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -308,23 +312,26 @@ func calculateRoadPath(start, end *PointOfInterest, curvyness, avgDim float64, r
|
|||||||
phase float64
|
phase float64
|
||||||
}
|
}
|
||||||
|
|
||||||
waves := make([]wave, 3)
|
waves := make([]wave, 2)
|
||||||
amp := (avgDim / 10.0) * curvyness
|
amp := (avgDim / 10.0) * adjustedCurvyness
|
||||||
mainWavelength := avgDim / 4.0
|
mainWavelength := avgDim / 4.0
|
||||||
if mainWavelength < 1 {
|
if mainWavelength < 1 {
|
||||||
mainWavelength = 1
|
mainWavelength = 1
|
||||||
}
|
}
|
||||||
baseNumWaves := (dist / mainWavelength) * curvyness
|
baseNumWaves := (dist / mainWavelength) * adjustedCurvyness
|
||||||
|
|
||||||
for i := 0; i < 3; i++ {
|
// Main wave
|
||||||
freqMultiplier := 1.0 + float64(i)
|
waves[0] = wave{
|
||||||
randomizedNumWaves := baseNumWaves * freqMultiplier * (0.75 + randSrc.Float64()*0.5)
|
|
||||||
waves[i] = wave{
|
|
||||||
amplitude: amp,
|
amplitude: amp,
|
||||||
numWaves: randomizedNumWaves,
|
numWaves: baseNumWaves * (0.75 + randSrc.Float64()*0.5),
|
||||||
phase: randSrc.Float64() * 2 * math.Pi,
|
phase: randSrc.Float64() * 2 * math.Pi,
|
||||||
}
|
}
|
||||||
amp /= 3
|
|
||||||
|
// Smaller wave for detours
|
||||||
|
waves[1] = wave{
|
||||||
|
amplitude: amp / 4,
|
||||||
|
numWaves: baseNumWaves * 4 * (0.75 + randSrc.Float64()*0.5),
|
||||||
|
phase: randSrc.Float64() * 2 * math.Pi,
|
||||||
}
|
}
|
||||||
|
|
||||||
controlPoints := make([]image.Point, numControlPoints+1)
|
controlPoints := make([]image.Point, numControlPoints+1)
|
||||||
|
|||||||
Reference in New Issue
Block a user