Намерете ъгъла на въртене на куба

Имам набор от точки (върхове X, Y, Z), които мога да прочета от STL файл в MATLAB. Те са точките, които образуват куб.

Искам да знам ъгъла, под който този куб може да бъде завъртян с оста X/Y/Z.

Може ли някой да даде някакви насоки как може да се направи това?

Благодаря


person Rusheel Jain    schedule 17.01.2015    source източник
comment
Това е добър въпрос, но е по-скоро математически, отколкото програмен.   -  person Rashid    schedule 17.01.2015
comment
Предполагам, че с min и max в различните измерения бихте могли да откриете някои ъгли на куба. След това от това изчислете страничната линия и накрая вземете ъгъла на тези линии с нормалния референтен X,Y,Z ... просто предположение, вероятно има по-просто решение.   -  person Hoki    schedule 17.01.2015


Отговори (2)


За да разберете как кубът се върти спрямо оста X/Y/Z, първо трябва да конструирате локалната координатна система за куба, което може лесно да се направи в следващите стъпки, ако приемем, че знаете всичките 8 ъглови точки на куба и как са свързани помежду си, за да образуват куба.

1) Изберете която и да е точка от 8-те точки, означете това като P0.

2) Трябва да има 3 други точки, които са свързани към P0. Обозначете тези 3 точки като P1, P2 и P3.

3) Създайте вектори от P0 до P1, P2 и P3 и обединете тези 3 вектора. Тези 3 единични вектора, означени като v1, v2 и v3, трябва да са ортогонални един на друг и могат да се използват като локална координатна система за куба. Можете да зададете v1, v2 и v3 като оси x, y и z за локалната координатна система, но трябва да се уверите, че те следват правилото на дясната ръка.

4) Сега, когато имате локалната координатна система, можете лесно да изчислите ъглите по отношение на оригиналната координатна система.

person fang    schedule 17.01.2015

Първо трябва да зададете координатна система на куба. Можете да направите това, като изберете точка от куба и начертаете ос на всеки от трите ръба, които са свързани с него (те ще бъдат в посоките към трите най-близки точки). Има повече от един начин, по който кубът може да бъде поставен в една линия с осите XYZ, така че изборът на точка е произволен. Можете да намерите най-близката точка до началото или просто да изберете произволно.

И така, сега имате вашата координатна система XYZ (дадена от три колонни вектора, които образуват матрица A) и вашата кубична координатна система (дадена от матрица C). Ако искате матричната трансформация T, която се свързва с двете, можете да решите матричното уравнение C = T*A. Тъй като A е просто идентичната матрица, имаме T = C. Ако искате действителните ъгли, можете да подравните осите една до друга с матрица на въртене използвайки един и същ процес на инверсия на матрицата многократно.

person eigenchris    schedule 17.01.2015