Domanda

Nel mio progetto OpenGL corrente che sto cercando di fare gli anelli di una catena di abbraccio i contorni di una curva di Bezier. Come faccio a trovare l'angolo tra due punti sulla curva in modo che possa posizionare gli anelli della catena in modo che essi seguono la curva.

Qui è una maschera della curva e catena, ho bisogno di un certo senso di rotazione della collegamenti in modo che essi seguono la curva.

C'è qualcuno qui sa come fare questo?

È stato utile?

Soluzione

Forse qualcosa di simile questo è quello che ti serve.

  

Come si calcola la tangente ad una curva di Bézier

     

Questo è difficile da trovare on-line. Deve essere un segreto gelosamente tenuto da coloro che sanno. Oh si possono trovare le formule matematiche, ma divertirsi interpretarli se non sei un matematico. Così che cosa è un povero sviluppatore di fare? Torna a scuola.

     

Ho passato un paio di giorni colpire il cranio su questo. Ho cercato su google il mio cervello (che era più facile una volta il mio cranio era sufficientemente sfondato). Poi, un luminoso bella Sabato, mi è stato forato in sulla prigione di mio sviluppatore di riposo le mie ossa stanche. Ho avuto la TV di fronte a me e Wikipedia a destra e ci stavo pigramente il passaggio tra loro sia a guardare.

     

Continua a leggere ...

Altri suggerimenti

Lasciate che i punti sulla curva di Bezier essere A e B. normalizzare il vettore AB quindi ha lunghezza 1. Sia questo AB_norm. Quindi utilizzare asin (AB_norm.y) o acos (AB_norm.x) per ottenere l'angolo. Un angolo di 0 gradi è un vettore orizzontale a destra, poi. C-style pseudocodice segue:

 get_angle(Point A, Point B) {
   AB.x = B.x - A.x;
   AB.y = B.y - A.y;
   length = sqrt(AB.x * AB.x + AB.y * AB.y);

   AB_norm.y /= AB.y / length;
   angle = asin(AB_norm.y);
   // or
   // AB_norm.x /= AB.x / length;
   // angle = acos(AB_norm.x);
 }

 angle = get_angle(A, B);
 glRotatef(angle, 0.0f, 0.0f, 1.0f);
 // Draw the chain link here

È necessario un po 'di matematica qui. Si possono trovare tangente, normale e vettori binormale, e quindi è possibile trovare l'angolo. Se siete ancora interessati fatemelo sapere, ho alcuni dettagli su questo argomento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top