2015-09-01 5 views
0

У меня есть 3d сцену, содержащую строку с координатами Xa, Ya, Za на одной стороне и Xb, Yb, Zb для другой стороны: enter image description hereОпределить координаты ограничивающего параллелепипеда

Как определить 3d координаты (xa1, YÀ1, ZÀ1, XA2, ... ZB4) из ограничивающего прямоугольника для этой линии, имея в дополнение к выше данных, ширина и высота этой коробки, а угол поворота вокруг своей оси: enter image description here

Спасибо

+0

Для уточнения: у вас есть линия * отрезок *, с учетом * конечных точек *, и вы не l ooking для маленького осевого параллельного блока, содержащего эту строку (что является обычным значением ограничивающего блока), но вместо этого для некоторого блока, который содержит эту строку, и дал размеры. Правильно? Является ли длина поля равным длине строки? Вы пишете, что у вас есть поворот вокруг оси, но в отношении какой системы отсчета, т. Е. Что означает угол? – MvG

+0

Да, ваши предположения, приведенные выше, верны. коробка имеет такую ​​же длину, что и линия. Угол 0 будет параллелен плоскости ниже. Спасибо за ваш ответ, попытайтесь закодировать алгоритм. –

ответ

1

По существу, вам нужно установить подходящую ортонормированную координату , так что один базисный вектор указывает вдоль данной линии, а другие два ортогональны этому. Фактический выбор зависит от угла, о котором вы говорите, но вам нужно какое-то направление для определения угла нуля.

Обычно я бы сказал, допустим, что a является нормированным (длиной 1) вектором от одного из пунктов к другому. Пусть v некоторое фиксированное опорное направление, например, «Вверх». Убедитесь, что a и v являются независимыми, то есть направлены в разные стороны. Вычислить кросс-продукт a × v, нормализовать длину блока и называть это b. Это будет вектор, ортогональный как a, так и v и, следовательно, что-то вроде направления от линии в горизонтальной плоскости, если v был наверху. Вычислить гр = в × б, который будет третий базисный вектор, ортогональное к и б и уже на единицу длины.

Теперь возьмите либо конечную точку и добавить ± ш/2 ∙ б ± ч/2 ∙ с к тому, что, где ш и ч являются размеры прямоугольника. Это дает вам 8 угловых точек вашего ограничивающего прямоугольника. Если вы хотите, чтобы повернуть рамку вокруг линии, нанесите двумерную вращение векторов б и с:

Ь» = соз (θ) ∙ б + sin (q) ∙ с
с» = соз (θ) ∙ с - грех (θ) ∙ б

+0

Работает отлично, спасибо! Теперь, как включить параметр угла в ваш алгоритм? –

+1

@LaurentCrivello: Я забыл об этой части вашего вопроса, но только что отредактировал ее в своем ответе. – MvG

Смежные вопросы