2013-09-24 9 views
2

Я пытаюсь повернуть и перевести равносторонний треугольник в 3D, пока его вершины не достигнут некоторых координат.Найти углы поворота треугольника в 3D, учитывая координаты его вершин

Вершины координаты F, G, H и F 'G', H» известны:

enter image description here

я смог найти новый центроид c' координаты, как это:

c'.x = (F'.x + G'.x + H'.x)/3 
c'.y = (F'.y + G'.y + H'.y)/3 
c'.z = (F'.z + G'.z + H'.z)/3 

Поэтому нет проблем с переводом треугольника. Но я не могу найти способ расчета поворотов, необходимых для размещения треугольника F'G'H 'в правильном положении ...

Я должен знать, насколько треугольник F'G'H' имеет для поворота в градусах вокруг каждой оси (x, y, z), зная, что повороты начального треугольника равны 0 °.

При вращении для каждой оси, я говорю об этом:

enter image description here

Есть идеи?

+2

Как вы определяете ротацию? Существуют разные соглашения. – Beta

+0

Я не совсем уверен в соглашении, но в основном, я должен знать, насколько треугольник F'G'H 'должен быть повернут в градусах на каждой оси (x, y, z), зная, что повороты начального треугольника равны 0 °. (Я обновил вопрос). – Julian

+0

Боюсь, что 3D-вращение не так просто, например, обратите внимание, что поворот на 90 ° вокруг оси X, а затем 90 ° вокруг оси Y не совпадает с поворотом на 90 ° вокруг оси Y, а затем 90 ° вокруг оси Х. поэтому, поскольку @Beta говорит, что существуют разные соглашения. Я предлагаю вам ознакомиться с [углами Эйлера] (http://en.wikipedia.org/wiki/Euler_angles#Quaternions) и [Quaternions] (http://en.wikipedia.org/wiki/Quaternions). – pseudoDust

ответ

4

Хитрость заключается в том, чтобы найти векторы нормалей треугольников, используя b4 крест продукта и после вращений

v1 = (F.x - G.x, F.y - G.y, F.z - G.z) 
v2 = (F.x - H.x, F.y - H.y, F.z - H.z) 
n = cross_prod(v1, v2) # see http://en.wikipedia.org/wiki/Cross_product 
n = n/norm(n) # normalize to unit vector 

v'1 = (F'.x - G'.x, F'.y - G'.y, F'.z - G'.z) 
v'2 = (F'.x - H'.x, F'.y - H'.y, F'.z - H'.z) 
n' = cross_prod(v'1, v'2) 
n' = n'/norm(n') 

rot = arc_cos(n.x * n'.x + n.y * n'.y + n.z * n'.z) 
+0

спасибо, я уже пытался вычислить нормальный, но я не вижу, как я могу получить поворот треугольника для каждой оси (я обновил вопрос на диаграмме). – Julian

+0

- точные углы в градусах, что вы хотите? или вы просто хотите аффинное преобразование, которое приведет вас от старого треугольника к новому треугольнику? – prgao

+0

Мне нужны точные углы. – Julian

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