Procházet zdrojové kódy

Fix for centering the tiles, extra logs

Tomasz Zieliński před 1 rokem
rodič
revize
eece03d24f
1 změnil soubory, kde provedl 14 přidání a 5 odebrání
  1. 14 5
      lib/rmg/PenroseTiling.cpp

+ 14 - 5
lib/rmg/PenroseTiling.cpp

@@ -173,21 +173,30 @@ std::set<Point2D> PenroseTiling::generatePenroseTiling(size_t numZones, CRandomG
 
 		split(t, points, indices, DEPTH);
 	}
-	// Find center of the mass, shift that center to (0.5, 0.5)
 
+	std::set<Point2D> uniquePoints(points.begin(), points.end());
+	std::vector<Point2D> uniquePointsVec(uniquePoints.begin(), uniquePoints.end());
+	logGlobal->info("Generated %d vertices and %d unique vertices", points.size(), uniquePointsVec.size());
+	
+	// Find center of the mass, shift that center to (0.5, 0.5)
 	Point2D center = Point2D(0.0f, 0.0f);
-	for (auto & point : points)
+	for (const auto & point : uniquePointsVec)
 	{
 		center = center + point;
 	};
-	center = center / points.size();
+	center = center / uniquePointsVec.size();
 
-	for (auto & point : points)
+	// This center is very close to (0.0, 0.0), anyway
+	logGlobal->info("Penrose tiling center: %s", center.toString().c_str());
+
+	for (auto & point : uniquePointsVec)
 	{
 		point = point - center + Point2D(0.5f, 0.5f);
 	};
 
-	vstd::copy_if(points, vstd::set_inserter(finalPoints), [](const Point2D point)
+	// For 8X8 map, only 650 out of 15971 points are in the range
+
+	vstd::copy_if(uniquePointsVec, vstd::set_inserter(finalPoints), [](const Point2D point)
 	{
 		return vstd::isbetween(point.x(), 0.f, 1.0f) && vstd::isbetween(point.y(), 0.f, 1.0f);
 	});