Răsfoiți Sursa

First acceptable formula for roads

Tomasz Zieliński 7 luni în urmă
părinte
comite
0b00c290bf
1 a modificat fișierele cu 13 adăugiri și 1 ștergeri
  1. 13 1
      lib/rmg/RmgPath.cpp

+ 13 - 1
lib/rmg/RmgPath.cpp

@@ -196,7 +196,19 @@ Path::MoveCostFunction Path::createCurvedCostFunction(const Area & border)
 	return [border = border](const int3& src, const int3& dst) -> float
 	{
 		// Route main roads far from border
-		float ret = dst.dist2d(src);
+		//float ret = dst.dist2d(src);
+
+		auto costFunction = [border](const int3& src, const int3& dst) -> float
+		{
+			// Use non-euclidean metric
+			int dx = std::abs(src.x - dst.x);
+			int dy = std::abs(src.y - dst.y);
+			// int dx = src.x - dst.x;
+			// int dy = src.y - dst.y;
+			return std::sqrt(dx * dx + dy * dy) -
+				500 * std::sin(dx * dy / 20);
+		};
+		float ret = costFunction(src, dst);
 		float dist = border.distanceSqr(dst);
 
 		if(dist > 1.0f)