Сообщество программистов Autodesk в СНГ

ADN Club => ObjectARX => Тема начата: Vt от 26-02-2016, 12:23:50

Название: Логика работы команды "Подобие"
Отправлено: Vt от 26-02-2016, 12:23:50
Хочу написать алгоритм который бы получал координаты плоского многоугольника, многоугольников, находящегося внутри заданного многоугольника, чтобы каждая сторона находилась на заданном одинаковом расстоянии от одной из его сторон и не ближе этого расстояния к другим, (аналог команды подобие в Autocad).
 Логика которую я сейчас реализовал: для каждой из сторон многоугольника я строю по две линии, удаленные на заданное расстояние от искомой линии (левую и правую относительно направления обхода многоугольника). Нахожу координаты левого и правого многоугольников, которые получаю из пересечения двух соседних линий. Многоугольник меньшей площади будет являться вписанным. (предполагается что исходный многоугольник не имеет пересечений) .
Но если рассматривать работу команды "Подобие" и ее результат сравнить с моим, то в полученном вписанном многоугольнике, может измениться количество вершин - удаляются неправильные - которые не соответствуют условию "не ближе заданного расстояния к стороне". Также добавляются новые. Я могу определить неправильные вершины. Но не могу придумать логику определения новых "Правильных". Как в команде "Подобие". Правильно ли я в целом рассуждаю, и какого алгоритма получения правильных вершин мне не хватает? Результат работы команды "Подобие" и моей привожу на рисунке: Синяя - исходная фигура. красная - ту которую построил мой алгоритм - желтые крестики - неправильные вершины, зеленые точки и линии - фигура которую построило "Подобие". Буду благодарен за любую подсказку или помощь. Тех, кто поломает голову над моей проблемой :)
Название: Re: Логика работы команды "Подобие"
Отправлено: Александр Ривилис от 26-02-2016, 14:35:03
Попробуй воспользоваться одним из методов:
Код - C++ [Выбрать]
  1. AcDbCurve::getOffsetCurves();
  2. AcDbCurve::getOffsetCurvesGivenPlaneNormal();
Название: Re: Логика работы команды "Подобие"
Отправлено: Николай Горлов от 26-02-2016, 14:51:25
Хочу написать алгоритм который бы получал координаты плоского многоугольника, многоугольников, находящегося внутри заданного многоугольника, чтобы каждая сторона находилась на заданном одинаковом расстоянии от одной из его сторон и не ближе этого расстояния к другим, (аналог команды подобие в Autocad).
))) можно только позавидовать усидчивости. один из варинатов алгоритма:http://www.cs.technion.ac.il/~ron/PAPERS/offsets_cad1993.pdf (http://www.cs.technion.ac.il/~ron/PAPERS/offsets_cad1993.pdf)

PS:а чем родной офсет из ObjectARX не устраивает, если не секрет?
Название: Re: Логика работы команды "Подобие"
Отправлено: Vt от 26-02-2016, 14:57:10
Спасибо за ответы, похоже я велосипед изобретал :)