Top.Mail.Ru
4.5.10. Dot Product
Dot product позволяет вычислить скалярное произведение векторов .
1) В Vector A - первый вектор (список или дерево данных);
2) В Vector B - второй вектор (список или дерево данных);
3) Unitize (булевое значение) преобразовывает вектора в единичные при True и не преобразовывает при False.
Пример
2. Если два вектора направлены строго в одном направлении, то Dot product = 1:
3. Если два вектора направлены перпендикулярно друг к другу, то Dot product = 0:
4. Произвольный угол между векторами будет давать числа в диапазоне от -1 до 1.
Таким образом при помощи Dot product можно проверять перпендикулярность векторов, их параллельность и создавать алгоритмы, в которых будет задействованы положения векторов относительно друг друга.
1. Если два вектора направлены в противоположные стороны, то Dot product = -1:
Представим себе некоторую задачу: в пространстве Rhino есть некоторое количество линий. Каким образом узнать какие из этих линий параллельны?
На первый взгляд может показаться, что параллельными являются следующие линии:
Но на самом деле, раз уж речь идёт о работе в высокоточной CAD, то работать "на глаз" не приходится. Для начала обратим внимание на факт, что в каждой линии Rhino всегда содержится так называемый тангенцальный вектор, то есть внутренний вектор (невидимый), направленный вдоль линии. Если визуализировать данный вектор, то получится следующее:
Кажущиеся параллельными линии имеют разное направление векторов. Если исходить из понятия Dot Product, или скалярного произведения векторов, то можно понять, что паралелльные вектора, направленные в одну сторону всегда дают в результате 1, в обратную - 1. В результате условиям параллельности будут соответствовать два числа: 1 и -1, если не оговорено иное.

И так, чтобы окончательно убедиться в параллельности этих трёх, кажущихся "на глаз" параллельных линий, следует вычислить Dot Product. Для решения следует выбрать один эталонный вектор, относительно которого будет проверяться параллельность. Например данный вектор:
После вычисления Dot Product эталонного вектора и всех остальных векторов, результат будет следующим:
На изображении выше 2 - список векторов для проверки, 1 - эталонный вектор. В панели видно, что только один вектор параллелен, так как результат = 1.0 (в строке с индексом 3), а вот почти паралеллен вектор под индексом 4, так как значение = -0.998578, что близко к -1, но не равно. Значит данный вектор не паралеллен, однако на глаз кажется совершенно иначе.
Если визуализировать индексы линий, то можно видеть, что параллельным вектором является вектор линии с индексом 3, а кажущийся параллельным вектор линии 4 не является параллельным эталонному вектору.
Задача
Попробуйте решить задачу по применению принципа Dot Product. Задача среднего уровня сложности.

Дано: фрагмент фасадных панелей состоящий из простых четырёхугольных Mesh. В случайном порядке у какого-то количества панелей нормальный вектор фейса повернут в противоположную сторону от других:
Необходимо создать алгоритм, который развернёт все нормали фейсов Mesh в одну сторону, по направлению вектора Y. В результате не зависимо от количества панелей должно получиться следующее:
Скачайте файл Grasshopper и попробуйте в нём самостоятельно решить задачу. Необходимо заполнить пробел в скрипте между начальными и конечными нодами:
При затруднении смотрите видео ответ на данную задачу:
Местонахождение Dot Product
Оцените этот урок и помогите тем самым сделать его лучше.
Контакты
Время работы
  • Понедельник - пятница
  • с 10 до 19 часов
Подпишитесь на еженедельную рассылку
© 2022 SKY ARCH SCHOOL
ИП Аюпов АМ. Все права защищены