C# - объединить уже соседние прямоугольники в список точек многоугольника по часовой стрелке?
Привет, Codeproject!
Я сделал рекурсивную функцию flood fill, чтобы найти все плитки в массиве, которые находятся рядом друг с другом. Я хотел бы использовать этот список плиток, чтобы сделать многоугольник, используя их прямоугольную информацию - многоугольник должен быть в конечном итоге в порядке по часовой стрелке, однако каждый раз, когда я пытаюсь это сделать, я сталкиваюсь с ошибкой, которую, кажется, не понимаю.
Все мои попытки были безуспешны, и это действительно беспокоит меня. Никаких исключений не возникает, однако все полигоны оказываются недействительными из-за того, что точки находятся либо в неправильном порядке, либо в совершенно неправильном положении.
Плитки не сортируются по X или Y. Я что-то упустил?
Что я уже пробовал:
То, что я пытался сделать, это пробежаться по списку вот так:
for (int i =0; i<TileList.Count; i++) { PointList.AddRange(new Vector2[] { new Vector2(TileList[i].BoundingBox.X, TileList[i].BoundingBox.Y), new Vector2(TileList[i].BoundingBox.X + TileList[i].BoundingBox.Width, TileList[i].BoundingBox.Y), new Vector2(TileList[i].BoundingBox.X + TileList[i].BoundingBox.Width, TileList[i].BoundingBox.Y + TileList[i].BoundingBox.Height), new Vector2(TileList[i].BoundingBox.X, TileList[i].BoundingBox.Y + TileList[i].BoundingBox.Height), }); }
for(int i =0; i<PointList.Count; i++) { for (int j = 0; j < PointList.Count; j++) { if(PointList[i] != PointList[j]) { if (Vector2.Distance(PointList[i], PointList[j]) < 2) { PointList.Remove(PointList[i]); PointList.Remove(PointList[j]); } } } } PointList = PointList.OrderBy(p => Math.Atan2(p.X, p.Y)).ToList();