Точки пересечения кривой и плоскости

Автор Тема: Точки пересечения кривой и плоскости  (Прочитано 6771 раз)

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

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Задачка такая. Мне нужно найти точки пересечения Curve и Plane. Но у плоскости метод IntersectWith принимает только линию. А у Curve IntersectWith требует другой Entity. Но у меня кривая может быть и дугой, и сплайном, а плоскость - это не Entity. Я в тупике. Единственное что нагуглил по схожей теме - там искали пересечение линии и поверхности. И даже для этого случая предлагалось создать солиды и искать их пересечение. Жуть. К моему случаю не подходит т.к. плоскость бесконечна, из нее солида не сделать. Мне даже не обязательно найти сами точки. Достаточно определиться сколько раз кривая пересекает плоскость - 1 или несколько.

На всякий случай обрисую зачем мне это надо. Я режу солид по нормали к касательной к одному из его ребер. Ребро солида - это та сама кривая, а плоскость строю для Slice. Но мне попадаются таки изогнуты солиды, что змея откусывает себе хвост - плоскость разреза пересекает тело несколько раз. Надо как-то это проверить. И сразу в голову приходит проверить плоскость на лишние пересечения с этим ребром.

Может я не нашел каких-то простых методов?
Заранее благодарен всем кто поможет.

Отмечено как Решение avc 29-08-2016, 12:47:39

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Не понимаю, как я сам эту статью не нашел... ведь долго искал же...
Но результат не порадовал. Проецирование кривой на плоскость работает не верно. Проецируется бесконечно удлиненная кривая, а не тот ее кусок, что существует в реале. Соответственно точек пересечения всегда получается 2, вместо одной.
Посмотрите на картинке:

я сделал три плоскости по радиусам большой дуги этого бублика и спроецировал на них дугу (зеленые линии). Средняя линия должна была закончится не доходя до центра, если б это была честная проекция.

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Разобрался. Там ошибка в коде. IntersectWith нельзя писать с параметром Intersect.ExtendBoth. Значения Non у этого перечисления нет. Я попробовал невнятное значение Intersect.OnBothOperands. Это сработало! Теперь все хорошо.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я попробовал невнятное значение Intersect.OnBothOperands
Чего же невнятное??? Очень даже внятное. Проверка пересечения при принадлежности точки пересечения обеим операндам пересечения (обеим кривым).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Проецируется бесконечно удлиненная кривая, а не тот ее кусок, что существует в реале
Я так понял, что с этим ты тоже уже разобрался - проецируется сама кривая без всякого удлинения. Это уже в процессе выполнения проверки пересечения возможны нюансы, связанные со значением параметра intersectType.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Да, вы правы, действительно уединение при поиске пересечения происходило. А про невнятный аргумент - в самом деле без вашего коментария нереально понять о чем речь. Теперь и остальные 2 варианта стали понятны. Спасибо!