Skip to content

Commit

Permalink
"2023-10-18-2d-geometric-constraint-solver" updated
Browse files Browse the repository at this point in the history
  • Loading branch information
AntonEvmenenko committed Oct 23, 2023
1 parent 6da95c7 commit 8f6cc1e
Showing 1 changed file with 5 additions and 9 deletions.
14 changes: 5 additions & 9 deletions _posts/ru/2023-10-18-2d-geometric-constraint-solver.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,7 @@ preview: "assets/images/posts/2023-10-18-2d-geometric-constraint-solver/preview.

<!--excerpt-->

Я провожу кучу времени в MCAD программах, таких как SolidWorks, Onshape, Fusion 360 и так далее. И мне всегда было интересно, как они устроены "под капотом". Поэтому, движимый идеей о том, что лучший способ разобраться в чем-то -- это реализовать это что-то самому с нуля, я решил закодить свой редактор 2D чертежей, который вел бы себя так же, как в во "взрослых" MCAD программах.

Для того, чтобы упростить задачу, я принял допущение о том, что редактор должен поддерживать очень ограниченный набор геометрических примитивов: только отрезки и дуги. Набор доступных ограничений также не должен быть всеобъемлющим, достаточно будет реализовать только основные.

Главная задача, которую необходимо решить в процессе создания такой программы, называется [Geometric constraint solving](https://en.wikipedia.org/wiki/Geometric_constraint_solving). Для того, чтобы сделать задачу более сложной и интересной, я решил не исследовать существующие подходы к решению этой задачи, а придумать это решение с нуля.
Я провожу кучу времени в MCAD программах, таких как SolidWorks, Onshape, Fusion 360 и т.д. Мне всегда было интересно, как они устроены "под капотом", поэтому я решил создать свой собственный 2D-редактор чертежей с ограниченным набором геометрических примитивов (только отрезки и дуги окружностей) и базовыми ограничениями. Главная проблема, которую нужно решить, это [Geometric constraint solving](https://en.wikipedia.org/wiki/Geometric_constraint_solving), и для фана я решил разработать свой метод решения этой проблемы, не изучая предварительно и не используя существующие подходы.

Вот что в итоге у меня получилось:

Expand All @@ -32,11 +28,11 @@ preview: "assets/images/posts/2023-10-18-2d-geometric-constraint-solver/preview.

Основные функции разрабатываемого 2D редактора, которые должны поддерживаться:

1. Добавление новых и удаление существующих геометрических примитивов (только отрезки или дуги)
2. Изменение с помощью мыши уже добавленных геометрических примитивов. **При любом изменении любого геометрического примитива, существующие наложенные ограничения должны оставаться валидными. Чтобы достичь этого, все существующие геометрические примитивы при необходимости могут перемещаться и изменять свои параметры**
3. Наложение новых ограничений на существующие геометрические примитивы и удаление существующих ограничений
1. Добавление и удаление отрезков и дуг окружностей
2. Передвижение и изменение с помощью мыши существующих отрезков и дуг окружностей, при этом программа должна автоматически следить за тем, чтобы существующие ограничения не нарушались
3. Наложение новых ограничений на линии и дуги окружностей и удаление существующих ограничений

Список ограничений, которые должны поддерживаться:
Ограничения, которые должны поддерживаться:

1. **COINCIDENCE**: совпадение точек
2. **PARALLELITY**: параллельность отрезков
Expand Down

0 comments on commit 8f6cc1e

Please sign in to comment.