road curvness scales with road length

This commit is contained in:
Grimsace
2026-02-04 15:50:53 -06:00
parent f80a4b253e
commit d6ebe2b4ec
+20 -13
View File
@@ -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) amplitude: amp,
waves[i] = wave{ numWaves: baseNumWaves * (0.75 + randSrc.Float64()*0.5),
amplitude: amp, phase: randSrc.Float64() * 2 * math.Pi,
numWaves: randomizedNumWaves, }
phase: randSrc.Float64() * 2 * math.Pi,
} // Smaller wave for detours
amp /= 3 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)