Mazin78 Ответов: 1

Как я могу вычесть две фигуры и получить результирующие точки новой фигуры в C#?


У меня есть точки (x,y) двух 2D-фигур, которые могут быть полигонами любого типа, но в основном прямоугольниками. Маленький прямоугольник находится внутри большого и всегда касателен к его окружности. Я хотел бы вычесть их (программно) и получить результирующие (x,y) точки нового полигона (но не на экране).

Может ли кто-нибудь дать какие-либо подсказки о том, как я мог бы это сделать?

Что я уже пробовал:

Я попытался воспользоваться системой.Окна.Средства массовой информации.Геометрия.Комбинированный метод, но, честно говоря, я не понимал, как он работает в моем случае.

Patrice T

- Я бы хотел их вычесть."
что вы подразумеваете под вычитанием ?
покажите пример данных и ожидаемый результат.

1 Ответов

Рейтинг:
8

OriginalGriff

Преобразуйте ваши точки в область (самый простой способ-через GraphicsPath или прямоугольник), и вы можете использовать различные методы, чтобы получить новую "фигуру":
Класс Региона (System.Чертеж) | Microsoft Docs[^]
Он включает в себя полезные методы, такие как Intersect, Union и Exclude.


Mazin78

Спасибо, я использовал оба метода (PathFigure и RectangleGeometry), и я получил новую форму с помощью:
CombinedGeometry(GeometryCombineMode.Исключить, myRectGeometry, myPathGeometry);
Теперь вопрос в том, как получить точки новой формы? Я не хочу только видеть новую форму на экране, но и мне нужны точки для дополнительной обработки.

OriginalGriff

Проблема в том, что "форма" не имеет "точек" - это "область", поэтому голые точки (которые вы использовали для создания формы) не определяют ее каким - либо значимым образом, потому что голые точки не указывают на "пустоту", которая является формой, подразумеваемой вашим описанием.

Для чего - именно - вы пытаетесь это использовать?

Mazin78

Мне нужны точки новой формы по двум причинам:
1 - экспорт их в приложение, которое рисует 3D-фигуры на основе 2D-точек.
2 - я могу использовать новую форму как исходную, а затем исключить из нее другую форму.