Vorrei ruotare un oggetto per affrontare un punto con cui ho un po 'di problemi.Ruota l'oggetto sul punto di fronte
Quindi sto iniziando con un oggetto che ha una base a zero ed è allineato sull'asse y.
desidero ruotarlo in modo che la parte superiore dell'oggetto sta affrontando la destinazione
mio processo finora è quello di: Dato all'asse A
- trovare la distanza tra la mia posizione e la mia posizione di sguardo: D
- creare un vettore di direzione: V = D.normalize()
- il giusto vettore: R = Una traversa D
- trovare il vettore per: U = D trasversale R
- trovare l'angolo tra la direzione e : angolo = acos (U (dot D)/(U.length * D.Length))
- ruotare di un angolo scalata per direzione su ciascun asse
qui è la rappresentazione codice di questo. Non sono sicuro di cosa sia esattamente sbagliato in questo ho lavorato su carta e, a mia conoscenza, questo approccio dovrebbe funzionare, ma i risultati sono completamente sbagliati quando vengono disegnati. Se qualcuno vede qualche difetto e potrebbe indicarmi la giusta direzione, sarebbe fantastico.
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);
Penso che ci sia un problema con i tuoi calcoli. Nel passo 5 trovi l'angolo tra il vettore "su" e il vettore di direzione, ma questo angolo sarà sempre di 90 gradi. U = D incrocio R, quindi per definizione U è perpendicolare sia a D che a R, e il punto U del prodotto a punti D sarà sempre zero. Se puoi essere più specifico su ciò che stai cercando di ottenere, allora posso trovarti una formula migliore. – mikebolt
Grazie per la risposta, sto provando a ruotare l'oggetto per affrontare un punto, quindi se il mio oggetto è a (0,0,0) e il punto è a (0,0,1) Voglio che il cilindro sia rivolto verso il basso l'asse z (il tubo che incapsula l'asse z). Ho provato a fornire un'immagine sopra, ma le mie abilità pittoriche sono carenti ^^ –