Chciałbym obrócić obiekt, aby zmierzyć się z punktem, z którym mam problem.Obróć obiekt do powierzchni punktu
Zaczynam od obiektu, który ma podstawę na zero i jest wyrównany na osi Y.
chciałbym go obrócić tak, aby jego górna obiektu stoi cel
Mój proces jakim jest: danej osi A
- znajdź odległość między moją pozycją a moją pozycją w wyglądzie: D
- utworzenia wektora kierunku V = D.normalize()
- znaleźć odpowiedni wektor: R = przekrój D
- znaleźć się wektor U = D przekrój R
- znaleźć kąt pomiędzy kierunkiem i : K = acos (dot D (U)/(U.length * D.length))
- obracać o kąt skalowane kierunku na każdej osi
tutaj jest reprezentacją, że kod. Nie jestem pewien, co dokładnie jest z tym nie tak, opracowałem to na papierze i według mojej wiedzy to podejście powinno działać, ale wyniki są całkowicie niepoprawne po narysowaniu. Jeśli ktokolwiek zauważy jakieś błędy i wskaże mi właściwy kierunek, będzie świetnie.
Vector3 distance = new Vector3(from.x, from.y, from.z).sub(to.x, to.y, to.z);
final Vector3 axis = new Vector3(0, 1, 0);
final Vector3 direction = distance.clone().normalize();
final Vector3 right = (axis.clone().cross(direction));
final Vector3 up = (distance.clone().cross(right));
float angle = (float) Math.acos((up.dot(direction)/ (up.length() * direction.length())));
bondObject.rotateLocal(angle, direction.x , direction.y, direction.z);
Myślę, że jest problem z matematyką. W kroku 5 znajduje się kąt pomiędzy wektorem "w górę" a wektorem kierunku, ale ten kąt zawsze będzie wynosił 90 stopni. U = D krzyż R, więc z definicji U jest prostopadła do D i R, a produkt kropki U kropka D zawsze będzie zero. Jeśli możesz dokładniej określić, co próbujesz osiągnąć, znajdę dla Ciebie lepszą formułę. – mikebolt
Dziękuję za odpowiedź, próbuję obrócić obiekt, aby stawić czoła punktowi, więc jeśli mój obiekt jest na (0,0,0), a punkt jest na (0,0,1), chcę, aby walec był zakryty oś Z (rurka otaczająca oś Z). Próbowałem dostarczyć obrazek powyżej, ale moje umiejętności malarskie są zbyt małe ^^ –