Как рассечь замкнутый сплайн?

Автор Тема: Как рассечь замкнутый сплайн?  (Прочитано 660 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN Club
  • ***
  • Сообщений: 135
  • Карма: 2
  • Человек доброй воли
Имеем в активе сплайн AcGeNurbCurve2d с атрибутом Closed. Необходимо рассечь данный объект по двум точкам (или параметрам). Как я понимаю метод AcGeCurve2d::getSplitCurves применим только к незамкнутым кривым. А как быть в данном случае?
Меняю
Извините, вам запрещён просмотр содержимого спойлеров.
на Ваших условиях



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

  • Administrator
  • *****
  • Сообщений: 6150
  • Карма: 643
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как рассечь замкнутый сплайн?
« Ответ #1 : 16-04-2017, 17:21:53 »
Как я понимаю метод AcGeCurve2d::getSplitCurves применим только к незамкнутым кривым.
Почему ты так решил?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 135
  • Карма: 2
  • Человек доброй воли
Re: Как рассечь замкнутый сплайн?
« Ответ #2 : 16-04-2017, 17:24:59 »
Почему ты так решил?
Ну как же... логично предположить, что одной точкой мы не разделим такой объект на два...
Меняю
Извините, вам запрещён просмотр содержимого спойлеров.
на Ваших условиях



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

  • Administrator
  • *****
  • Сообщений: 6150
  • Карма: 643
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как рассечь замкнутый сплайн?
« Ответ #3 : 16-04-2017, 17:26:27 »
Почему ты так решил?
Ну как же... логично предположить, что одной точкой мы не разделим такой объект на два...
Ты попробовал?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 135
  • Карма: 2
  • Человек доброй воли
Re: Как рассечь замкнутый сплайн?
« Ответ #4 : 16-04-2017, 17:34:33 »
Ты попробовал?
Честно говоря нет. Но ведь такое невозможно сделать с помощью команды BREAK! Это меня и смутило. Кроме того в описании к методу по этому поводу ничего не сказано - там либо обе кривые NULL либо нет.

Меняю
Извините, вам запрещён просмотр содержимого спойлеров.
на Ваших условиях



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

  • Administrator
  • *****
  • Сообщений: 6150
  • Карма: 643
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как рассечь замкнутый сплайн?
« Ответ #5 : 16-04-2017, 18:03:57 »
Честно говоря нет.
Практика - критерий истины. У меня другая логика. У каждой кривой есть свой диапазон параметра. В данном случае эта функция делит кривую по заданному параметру param. Т.е. должны появится две кривые: [0, param] и [param, maxparam].
Если практика покажет, что это не так, то будем разбираться дальше.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 135
  • Карма: 2
  • Человек доброй воли
Re: Как рассечь замкнутый сплайн?
« Ответ #6 : 16-04-2017, 18:18:34 »
[0, param] и [param, maxparam]
Ах вот оно что! По вашей логике получается, что последовательно деля окружность или эллипс двумя точками мы должны получить три объекта... Ну что же посмотрим...
Меняю
Извините, вам запрещён просмотр содержимого спойлеров.
на Ваших условиях



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

  • ADN Club
  • ***
  • Сообщений: 135
  • Карма: 2
  • Человек доброй воли
Re: Как рассечь замкнутый сплайн?
« Ответ #7 : 04-05-2017, 11:15:05 »
В продолжении темы о рассечении сплайна хотелось бы задать вот такой вопрос: имеем сплайн с атрибутом "self-intersecting", ну например вот такой:



Возникает задача о "расщеплении" такого сплайна в точке взаимного пересечения. Для себя вижу пока одно решение так сказать "с ходу": разбить сплайн на несколько частей и  проверить пересечение каждого под-сплайна друг с другом... Таким образом находится точка пересечения. Но как-то это "коряво" и есть дальнейшие трудности... Может будут ещё "светлые" идеи...?
Меняю
Извините, вам запрещён просмотр содержимого спойлеров.
на Ваших условиях



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

  • ADN
  • *
  • Сообщений: 154
  • Карма: 14
  • Skype: nick.gorlov
Re: Как рассечь замкнутый сплайн?
« Ответ #8 : 04-05-2017, 11:35:57 »
ну, сплайн разбить придется не на несколько частей, а на ооооочень много частей (грубо говоря - на отрезки или дуги из которых он собственно говоря и состоит на самом деле). а потом да, искать пересечения каждого отрезка со всеми остальными. и это даст ВСЕ точки самопересечения.

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

  • ADN Club
  • ***
  • Сообщений: 135
  • Карма: 2
  • Человек доброй воли
Re: Как рассечь замкнутый сплайн?
« Ответ #9 : 04-05-2017, 11:44:45 »
ну, сплайн разбить придется не на несколько частей, а на ооооочень много частей
Это зачем?  Если использую метод AcGeCurve2d::getSplitCurves, то данный сплайн достаточно разбить на 3...4 части равной длины. А Вы я так полагаю хотите использовать кусочно-линейную аппроксимацию? Ну это не точный метод и весьма громоздкий в плане вычисления...
Меняю
Извините, вам запрещён просмотр содержимого спойлеров.
на Ваших условиях



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

  • Administrator
  • *****
  • Сообщений: 6150
  • Карма: 643
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как рассечь замкнутый сплайн?
« Ответ #10 : 04-05-2017, 11:49:36 »
Увы, но подозреваю, что другого решения нет.
Как вариант - аппроксимация сплайна и использование AcDbMPolygon::loopCrossesMPolygon для получения точек пересечения.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 6150
  • Карма: 643
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как рассечь замкнутый сплайн?
« Ответ #11 : 04-05-2017, 11:50:59 »
Если использую метод AcGeCurve2d::getSplitCurves, то данный сплайн достаточно разбить на 3...4 части равной длины.
А какая гарантия, то точка самопересечения не окажется внутри одного из кусков и попарное пересечение ничего не даст?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 135
  • Карма: 2
  • Человек доброй воли
Re: Как рассечь замкнутый сплайн?
« Ответ #12 : 04-05-2017, 11:55:57 »
Увы, но подозреваю, что другого решения нет.
Хорошо, допустим нашел я точку взаимного пересечения, а как мне определить ДВА параметра на исходной кривой соответствующие этой одной точке?
Меняю
Извините, вам запрещён просмотр содержимого спойлеров.
на Ваших условиях



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

  • Administrator
  • *****
  • Сообщений: 6150
  • Карма: 643
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как рассечь замкнутый сплайн?
« Ответ #13 : 04-05-2017, 11:56:20 »
На сколько частей нужно разбить этот сплайн, чтобы гарантировано найти точки самопересечения:



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 6150
  • Карма: 643
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как рассечь замкнутый сплайн?
« Ответ #14 : 04-05-2017, 11:57:42 »
Хорошо, допустим нашел я точку взаимного пересечения, а как мне определить ДВА параметра на исходной кривой соответствующие этой одной точке?
Однозначно готового простого алгоритма для этого нет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение