"Комплексные" сплайны

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

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

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

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
"Комплексные" сплайны
« : 31-08-2017, 16:33:17 »
В своей повседневной многотрудной работе со сплайнами мне часто попадаются так называемые "комплексные" сплайны - это объекты идентифицируемые как AcDbSpline, но с интересной особенностью: подрыв такого сплайна приводит к разложению последнего на ряд саб-сплайнов - в точности повторяющих контур исходного.
В связи с этим возникают вопросы:
1. Как распознавать такие сплайны без использования подрыва?
2. Как самостоятельно создавать такие сплайны?
Может кто в теме данной ситуации?

Пример комплексного сплайна прилагаю во вложении.
« Последнее редактирование: 31-08-2017, 19:29:47 от Debalance »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: "Комплексные" сплайны
« Ответ #1 : 01-09-2017, 00:09:06 »
подрыв
Это что такое?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: "Комплексные" сплайны
« Ответ #2 : 01-09-2017, 09:10:45 »
Я полагаю, аналог _.explode :)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Re: "Комплексные" сплайны
« Ответ #3 : 01-09-2017, 10:20:19 »
Я полагаю, аналог _.explode :)
Вот-вот... Я бы даже выбросил слово "аналог".

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 475
  • Карма: 63
Re: "Комплексные" сплайны
« Ответ #4 : 01-09-2017, 13:00:29 »
Книга NURBS. Глава 5 - там даже есть алгоритм DecomposeCurve
Насколько я помню, это определяется степенью кривой. Сплайн это Nurbs-кривая и если у неё высокая степень, то её можно разделить на несколько сегментов - кривых Безье меньшей степени

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

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Re: "Комплексные" сплайны
« Ответ #5 : 01-09-2017, 13:38:28 »
Книга NURBS. Глава 5 - там даже есть алгоритм DecomposeCurve
Спасибо, дружище trir, за наводку, но мне не очень бы хотелось писать свои кастомные методы, а есть желание использовать уже готовые решения в рамках ObjectARX SDK. Тем более сам AutoCAD прекрасно определяет "высокую степень" конкретного сплайна и в состоянии запустить "алгоритм DecomposeCurve". Поэтому моя первоочередная задача добраться до этих готовых решений зашитых в лоне AutoCAD.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: "Комплексные" сплайны
« Ответ #6 : 01-09-2017, 13:46:57 »
Ну из того, что я обнаружил:
1. Не совпадает количество управляющих точек (controlPoints) и количество узлов (knots). Видно при помощи ARXDBG
2. Совпадают некоторые управляющие точки:

3. Отрицательная площадь:




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

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 475
  • Карма: 63
Re: "Комплексные" сплайны
« Ответ #7 : 01-09-2017, 14:34:48 »
Цитировать
Совпадают некоторые управляющие точки
так всегда на прямых участках

Цитировать
Не совпадает количество управляющих точек (controlPoints) и количество узлов (knots).
так всегда
knots = controlPoints + degree + 1

Цитировать
Св.4.13  NURBS  кривая  без  внутренних  узлов  является  рациональной  кривой  Безье, поскольку  N_(i,p) (u)  сводятся  к  B_(i,n) (u); сравните  формулы  (4.2)  и  (4.3)  с  уравнением  (1.15). Из  этого, вместе  со  Св.4.7, следует, что  кривые  NURBS  содержат  нерациональные  B-сплайны  и  рациональные  и  нерациональные  кривые  Безье  в  качестве  частных  случаев;

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

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Re: "Комплексные" сплайны
« Ответ #8 : 01-09-2017, 15:01:51 »
так всегда
knots = controlPoints + degree + 1

Это не всегда так. Вот выдержка из Википедии:
Цитировать
A common misconception is that each knot is paired with a control point. This is true only for degree 1 NURBS (polylines). In general, the knots break the domain up into knot spans, but each control point corresponds to one basis function which spans a range of (degree+1) knot spans.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: "Комплексные" сплайны
« Ответ #9 : 01-09-2017, 15:02:31 »
Цитировать

    Не совпадает количество управляющих точек (controlPoints) и количество узлов (knots).

так всегда
knots = controlPoints + degree + 1
Судя по всему не всегда. Во всяком случае я средствами AutoCAD нарисовал сплайн с degree - 3, controlPoints - 10 и knots - 11.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 475
  • Карма: 63
Re: "Комплексные" сплайны
« Ответ #10 : 01-09-2017, 15:07:08 »
по этому и нужно учить теорию - когда её знаешь, этих вопросов просто не возникает
а я уже почти всё забыл... :=(

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

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Re: "Комплексные" сплайны
« Ответ #11 : 01-09-2017, 20:56:13 »
Во всей этой математической кутерьме связанной с кнотами и контрол-поинтами меня интересует практическая сторона вопроса, непосредственно касающаяся опубликованного мной чертежа. Речь идёт о создании региона (AcDbRegion). Я провёл небольшой тест:

1. Попытался создать регион из исходного сплайна (команда _REGION). В результате получается вполне себе корректный объект - даже площадь имеет адекватное значение.

2. В тулбаре AutoCAD я нажал вот на эту иконку:

и применив к сплайну команду _EXPLODE я расчленил его на группу примитивов. Если далее к полученной группе попытаться применить команду _REGION, то в текстовом окне мы обнаружим следующий лог:
1 loop extracted.
1 loop rejected.
    Unable to cover wire                   : 1 loop.
0 Regions created.
То же фиаско нас ожидает при использовании команды _BOUNDARY, если в качестве Object type указать Region.

Таким образом наблюдается некоторый дуализм в поведении AutoCAD'а. Что это баг?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: "Комплексные" сплайны
« Ответ #12 : 01-09-2017, 21:03:57 »
Что это баг?
Воспринимай это как ограничение в AutoCAD. Не вижу смысла даже передавать это в ADN DevHelp.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Re: "Комплексные" сплайны
« Ответ #13 : 01-09-2017, 21:18:33 »
Воспринимай это как ограничение в AutoCAD.
Что-то уж больно много ограничений набирается у меня при работе со сплайнами.

Не вижу смысла ...
Я тоже его не вижу. Просто пытаюсь самостоятельно разрулить программную реализацию создания региона для конкретной задачи. Но похоже выше головы не прыгнешь в рамках исходного SDK.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: "Комплексные" сплайны
« Ответ #14 : 01-09-2017, 21:31:39 »
Но похоже выше головы не прыгнешь в рамках исходного SDK.
Думаю, что единственный правильный способ - аппроксимация сплайна с заданной точностью, а затем уже создание региона. Тем более, что точности Region и 3DSolid порядка 1e-6
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение