Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Programmation > Bibliothèques > OpenGL > Créez des programmes en 3D avec OpenGL > Annexes > La trigonométrie > Lecture du tutoriel

La trigonométrie

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Auteur : Kayl
Visualisations : 8 010

Plus d'informations Plus d'informations
Dans cette annexe mathématique nous verrons le concept mathématique de trigonométrie, généralement rencontrée dès la classe de 4ème dans le cursus français.
Nous nous contenterons de parcourir le minimum utile pour faire de la 3D et nous verrons que des outils mathématiques faciles d'utilisation peuvent nous être grandement utiles.
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire

Trigo dans un triangle rectangle

La trigonométrie (littéralement "mesures" dans le "triangle"), est une branche des maths qui vient donner des relations entre les longueurs des cotés d'un triangle et ses angles.

La trigo se recontre généralement dans le cas d'un triangle rectangle :

Image utilisateur


En considérant l'angle alpha, on définit deux fonctions "cosinus" et "sinus" permettant de donner une relation entre la valeur de cet angle, et les longueurs des cotés du triangles :
Image utilisateur


En utilisant l'inverse de ces fonctions on peut alors trouver la valeur de l'angle en fonction des longueurs des cotés. On peut tout aussi bien, à partir de la valeur de l'angle et de la longueur d'un seul coté du triangle, trouver les longueurs des autres cotés.

Le cercle trigonométrique

Le triangle rectangle est la première approche que l'on a de la trigonométrie. On introduit généralement un autre objet mathématique : le cercle trigonométrique. Ce cercle mesure "1" (pas d'unité requise) de rayon et nous permet de donner tout leur sens au cosinus et sinus que nous venons de rencontrer :

Image utilisateur


Dans la figure ci-dessus on retrouve un triangle rectangle et donc nos formules vues plus haut sont toujours applicables :

Image utilisateur

Image utilisateur


Et là tout s'éclaire ! Alors qu'auparavant nous pensions que cos et sin étaient de simples mesures abstraites qui ne servaient pas à grand chose, ici on se rend compte grâce au cercle trigonométrique qu'elles permettent de donner l'abscisse (sur X) et l'ordonnée (sur Y) d'un point quelconque du cercle trigonométrique se trouvant à un angle alpha donné par rapport à l'origine.
On note au passage que les angles se mesurent ici dans le sens trigonométrique (c'est à dire le sens inverse des aiguilles d'une montre).

Systèmes de coordonnées

Nous avons vu rapidement dans le cas du cercle trigonométrique que nous pouvions passer d'un angle à une coordonnée (X,Y). Il est donc temps de faire un petit rappel non exhaustif sur les systèmes de coordonnées qui nous intéressent avec OpenGL.

Coordonnées cartésiennes



Image utilisateur


Les coordonnées cartésiennes sont les plus courantes. C'est d'ailleurs dans ce système qu'on exprime les positions de nos vertices avec OpenGL : glVertex3d( X, Y, Z);

Coordonnées polaires


Image utilisateur


Les coordonnées polaires sont un autre système de coordonnées que nous n'utiliserons pas trop mais qui nous sert d'intermédiaire pour bien comprendre la suite.
Un point est repéré par un angle (thêta) et un rayon (r). On y voit une généralisation du cercle trigonométrique (où r valait 1) et donc pouvons très facilement en déduire commencer passer des coordonnées polaires aux coordonnées cartésiennes :

Image utilisateur


Exemple en OpenGL



Nous venons de voir qu'il est possible d'exprimer un même point dans des systèmes de coordonnées différents.
Nous pouvons donc envisager deux méthodes identiques en OpenGL pour faire tourner un point autour de l'origine :

Coordonnées polairesCoordonnées cartésiennes*
Code : C
1
2
3
4
glRotated(theta,0,0,1);
glBegin(GL_POINTS);
glVertex2i(r,0);
glEnd();
Code : C
1
2
3
4
5
6
7
#include <math.h>

x=r*cos(theta*M_PI/180);
y=r*sin(theta*M_PI/180);
glBegin(GL_POINTS);
glVertex2i(x,y);
glEnd();


* les angles en OpenGL sont exprimés en degré, cependant cos et sin, les fonctions définies dans <math.h>, attendent des radian. Il faut donc les convertir en multipliant par M_PI/180.



Coordonnées sphériques



Ce système de coordonnées peut être vu comme une généralisation des coordonnées polaires en 3D. Il est très utile et nous servira notamment à contrôler l'orientation de notre caméra à l'aide de la souris.
En coordonnées sphériques, un point est représenté par un rayon r, et deux angles thêta et phi :

Image utilisateur


Pour passer des coordonnées sphériques aux coordonnées cartésiennes qui nous sont si chères, il faut y aller en 2 étapes et se ramener à des cas 2D très simples.

Tout d'abord considérons seulement le rayon r et l'angle phi. Nous nous ramenons à un cas de coordonnées polaires sur le plan XZ :

Image utilisateur


Nous pouvons en déduire directement la coordonnée Z de notre point avec le sinus , et le cosinus nous permet de définir une variable intermédiaire rtemp.

Image utilisateur


rtemp est le rayon d'un cercle intermédiaire placé à l'altitude Z de notre point :

Image utilisateur


En regardant notre sphère du dessus et considérant le cercle de rayon rtemp avec le dernier angle thêta, nous sommes à nouveau dans un simple problème de coordonnées polaires. Il est donc aisé de déterminer les coordonnées X et Y finale de notre point :
Image utilisateur


En résumé nous avons donc tout simplement :
Image utilisateur


Comme je l'ai dit plus haut, ce système de coordonnées nous sera très utile car nous pourrons ainsi contrôler l'orientation de la caméra à la souris : l'angle thêta contrôle l'orientation horizontale du regard (comme quand on fait "non" de la tête) et l'angle phi contrôle l'orientation verticale du regard (comme quand on fait "oui" de la tête).

Ce chapitre, d'un niveau mathématique assez facile (collège), viendra trouver tout son sens dans le chapitre qui arrive : contrôle avancé de la caméra, où nous contrôlerons une caméra de type free-fly avec la souris le clavier.
Chapitre précédent Sommaire
Retour en haut Retour en haut


Créé : le 24/10/2007 à 18:42:30
Modifié : le 08/11/2008 à 15:22:24
Avancement : 0%
Licence : Copie non autorisée

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 455 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0226s (0.0104s)