Логика работы команды "Подобие"

Автор Тема: Логика работы команды "Подобие"  (Прочитано 6995 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн VtАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Хочу написать алгоритм который бы получал координаты плоского многоугольника, многоугольников, находящегося внутри заданного многоугольника, чтобы каждая сторона находилась на заданном одинаковом расстоянии от одной из его сторон и не ближе этого расстояния к другим, (аналог команды подобие в Autocad).
 Логика которую я сейчас реализовал: для каждой из сторон многоугольника я строю по две линии, удаленные на заданное расстояние от искомой линии (левую и правую относительно направления обхода многоугольника). Нахожу координаты левого и правого многоугольников, которые получаю из пересечения двух соседних линий. Многоугольник меньшей площади будет являться вписанным. (предполагается что исходный многоугольник не имеет пересечений) .
Но если рассматривать работу команды "Подобие" и ее результат сравнить с моим, то в полученном вписанном многоугольнике, может измениться количество вершин - удаляются неправильные - которые не соответствуют условию "не ближе заданного расстояния к стороне". Также добавляются новые. Я могу определить неправильные вершины. Но не могу придумать логику определения новых "Правильных". Как в команде "Подобие". Правильно ли я в целом рассуждаю, и какого алгоритма получения правильных вершин мне не хватает? Результат работы команды "Подобие" и моей привожу на рисунке: Синяя - исходная фигура. красная - ту которую построил мой алгоритм - желтые крестики - неправильные вершины, зеленые точки и линии - фигура которую построило "Подобие". Буду благодарен за любую подсказку или помощь. Тех, кто поломает голову над моей проблемой :)

Отмечено как Решение Александр Ривилис 10-03-2016, 17:29:31

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Логика работы команды "Подобие"
« Ответ #1 : 26-02-2016, 14:35:03 »
Попробуй воспользоваться одним из методов:
Код - C++ [Выбрать]
  1. AcDbCurve::getOffsetCurves();
  2. AcDbCurve::getOffsetCurvesGivenPlaneNormal();
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Re: Логика работы команды "Подобие"
« Ответ #2 : 26-02-2016, 14:51:25 »
Хочу написать алгоритм который бы получал координаты плоского многоугольника, многоугольников, находящегося внутри заданного многоугольника, чтобы каждая сторона находилась на заданном одинаковом расстоянии от одной из его сторон и не ближе этого расстояния к другим, (аналог команды подобие в Autocad).
))) можно только позавидовать усидчивости. один из варинатов алгоритма:http://www.cs.technion.ac.il/~ron/PAPERS/offsets_cad1993.pdf

PS:а чем родной офсет из ObjectARX не устраивает, если не секрет?

Оффлайн VtАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Re: Логика работы команды "Подобие"
« Ответ #3 : 26-02-2016, 14:57:10 »
Спасибо за ответы, похоже я велосипед изобретал :)