Проекция точки на плоскость

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

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

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

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Как спроецировать точку на плоскость (по линии нормали плоскости до прямой)?

я пробовал использовать
http://adn-cis.org/ploskosti-proekczii-i-vyibrannyie-tochki.html
то что то не выходит спроецировать точку на вертикальную плоскость, точка как будто "не доходит" до этой плоскости. Может есть какой другой путь..

не уверен, но может это подойдет для моего случая (но как пользоваться, не понял)
http://www.revitapidocs.com/2018.1/9426acbb-e021-d7b4-06ec-98a902420273.htm

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Проекция точки на плоскость
« Ответ #2 : 07-02-2019, 17:12:38 »
Ну а с использованием RevitAPI удобно, например так:
1) Создать Plane, например, по нормали и origin-у
2) Используя plane.VecX, VecY, normal и Origin собрать Transform
3) найти Transform.Inverse.OfPoint искомой точки, обнулить координату Z - это точка проекции на плоскость, величина Z - расстояние до плоскости, при том со знаком, указывающим, в каком направлении от плоскости находится точка

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Проекция точки на плоскость
« Ответ #3 : 07-02-2019, 17:22:25 »
2) Используя plane.VecX, VecY, normal и Origin собрать Transform
3) найти Transform.Inverse.OfPoint искомой точки, обнулить координату Z - это точка проекции на плоскость, величина Z - расстояние до плоскости, при том со знаком, указывающим, в каком направлении от плоскости находится точка
Можно пример?

VecX, VecY - это получается местная система координат плоскости?

Transform.Inverse.OfPoint - что означает это операция?

Отмечено как Решение enot 10-02-2019, 10:08:00

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Проекция точки на плоскость
« Ответ #4 : 07-02-2019, 17:25:22 »
я пробовал использовать
http://adn-cis.org/ploskosti-proekczii-i-vyibrannyie-tochki.html
то что то не выходит спроецировать точку на вертикальную плоскость, точка как будто "не доходит" до этой плоскости. Может есть какой другой путь..
В том коде есть ошибка. Смотрите код в оригинальной статье - https://thebuildingcoder.typepad.com/blog/2014/09/planes-projections-and-picking-points.html. Там уже исправлено

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Проекция точки на плоскость
« Ответ #5 : 07-02-2019, 18:03:17 »
В том коде есть ошибка. Смотрите код в оригинальной статье - https://thebuildingcoder.typepad.com/blog/2014/09/planes-projections-and-picking-points.html. Там уже исправлено
Код - C# [Выбрать]
  1. //XYZ q = p + d * plane.Normal; // wrong according to Ruslan Hanza and Alexander Pekshev in their comments http://thebuildingcoder.typepad.com/blog/2014/09/planes-projections-and-picking-points.html#comment-3765750464
  2. XYZ q = p - d * plane.Normal;

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

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Проекция точки на плоскость
« Ответ #6 : 10-02-2019, 10:07:53 »
В том коде есть ошибка. Смотрите код в оригинальной статье - https://thebuildingcoder.typepad.com/blog/2014/09/planes-projections-and-picking-points.html. Там уже исправлено
Спасибо, теперь все ок

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Проекция точки на плоскость
« Ответ #7 : 24-03-2019, 20:14:17 »
Прошу пояснить почему там все таки знак минус.
Мне кажется в общем случае там может быть как минус , так и плюс в зависимости где находится проецируемая точка pt или pt2 относительно начала координат pt(0,0,0) и плоскости Plane .  Скалярное произведение в любом случае нам даст модуль числа....



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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Проекция точки на плоскость
« Ответ #8 : 24-03-2019, 22:09:43 »
Скалярное произведение в любом случае нам даст модуль числа....
Нет: https://ru.wikipedia.org/wiki/Скалярное_произведение
Цитировать
в формуле знак определяется только косинусом угла (нормы векторов всегда положительны). Поэтому скалярное произведение > 0, если угол между векторами острый, и < 0, если угол между векторами тупой.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Проекция точки на плоскость
« Ответ #9 : 24-03-2019, 23:17:34 »
в формуле  знак определяется только косинусом угла (нормы векторов всегда положительны). Поэтому скалярное произведение > 0, если угол между векторами острый, и < 0, если угол между векторами тупой.
В таком случае расстояние dist для pt(XYZ) будет положительным , т.е смещение точки производится по направлению нормали плоскости
http://adn-cis.org/forum/index.php?topic=9080.0

а для pt2(XYZ) отрицательным ...

тогда проекция получается должна вычисляться через "плюс": XYZ q = p + d * plane.Normal;  :-[

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Проекция точки на плоскость
« Ответ #10 : 24-03-2019, 23:22:14 »
В таком случае расстояние dist для pt(XYZ) будет положительным , а для pt2(XYZ) отрицательным ...
С точностью до наоборот...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Проекция точки на плоскость
« Ответ #11 : 24-03-2019, 23:39:16 »
Смотрите - угол между вектором C и Plane.Normal - острый:



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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Проекция точки на плоскость
« Ответ #12 : 25-03-2019, 00:12:59 »
Смотрите - угол между вектором C и Plane.Normal - острый:
И что из этого следует? У тебя вектор C смотрит в противоположную сторону. Должно быть так:



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

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Проекция точки на плоскость
« Ответ #13 : 25-03-2019, 09:45:42 »
Да, это я напутал с направлением при вычитании векторов. Спасибо )