Calcul C++ - Aide pour comprendre le calcul

Résolu/Fermé
DamsWD Messages postés 35 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 9 juin 2015 - 7 mai 2009 à 10:27
mamiemando Messages postés 33372 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 novembre 2024 - 7 mai 2009 à 21:28
Bonjour,

Je fais un appel au secours car j'ai un petit souci de compréhension.

J'ai réalisé des composants graphiques sous Borland Builder C++. Le souci c'est que j'ai trouvé un code (ci-dessous) et que je ne comprends pas trop les calculs qui sont effectués. Si une personne pourrait m'apporter de l'aide ça serait sympathique, car je dois le présenter dans une semaine.

Ce code permet d'afficher une aiguille qui pivote selon les valeurs.

Voici une image du composant : http://img3.hostingpics.net/pics/648270boussole.png

Voici le code du calcul de l'aiguille :
        // On calcule la position pour chaque point et on affiche la flèche.
        n = Degres*200/360;
        z = n/100*3.14159;
        u = (n+50)/100*3.14159;

        x0 = sin(z)*80;
        y0 = -cos(z)*80;

        x1 = -sin(z)*10;
        y1 = cos(z)*10;

        x2 = sin(u)*2;
        y2 = -cos(u)*2;

        x3 = -sin(u)*2;
        y3 = cos(u)*2;

        points[0] = Point(x1+130,y1+115);
        points[1] = Point(x2+130,y2+115);
        points[2] = Point(x0+130,y0+115);
        points[3] = Point(x3+130,y3+115);

        ImgBoussole->Canvas->Brush->Color = clRed;
        ImgBoussole->Canvas->Polygon(points, 3);

        // On dessine la flèche de la boussole.
        Canvas->Draw(0, 0, ImgBoussole);


Merci, Damien
A voir également:

4 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
7 mai 2009 à 10:39
n est une variable allant de 0 à 200 suivant l'angle choisi.
z est la valeur de l'angle en radians
u c'est z + pi/2, c'est à dire l'angle plus l'angle droit
Ensuite, tu calcul à partir de l'angle les 4 points du polygone.
1
mamiemando Messages postés 33372 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 novembre 2024 7 802
7 mai 2009 à 13:20
Petites précisions : un point dans les coordonnées cartésiennes sont de la forme (r cos(t), r sin(t)) est un point situé sur le cercle de centre (0,0) et de rayon r, et situé sur la demi droite partant de (0,0) et formant un angle de t radians avec la droite horizontale dont les points appartiennent sont {(x,0), x > 0}.
https://upload.wikimedia.org/wikipedia/commons/8/8f/Unit_circle.svg

Ainsi x0 est sur le cercle de centre (0,0) et de rayon 80, x1 sur le cercle de centre (10,10) et de centre 0,0 etc... Ici dans le code que tu as récupéré, le cos est transformé en +/-sin (et inversement) ce qui revient à ajouter ou à soustraire un angle de pi/2 (un angle droit, soit 90°). En effet cos(t+pi/2) = sin(t), cos(t + 3pi/2) = -sin(t) etc...

Les points (x0,y0), (x1,y1)... sont donc tous positionnés sur un cercle dont le centre est (0,0) respectivement de rayon 80, 10, 2 et 2.

Si tout ça te rappelle de lointains souvenirs de trigonométrie mais que ça reste flou, lis cette page :
https://fr.wikipedia.org/wiki/Cercle_unit%C3%A9

Les coordonnées des points sont obtenus en faisant une translation de (x0,y0), (x1,y1)... de 130 sur l'axe des abscisses et de 115 sur l'axe des ordonnées, ce qui revient à placer ces points sur des cercles de centre (130,115) de rayon 10, 2, 80 et 2.

Ces quatres points correspondent aux coins du polygones rouges sur ton image. En espérant que c'est plus clair ;-)

Bonne chance
1
DamsWD Messages postés 35 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 9 juin 2015
7 mai 2009 à 17:58
Ah oui, j'ai compris merci beaucoup à vous deux !

Bonne soirée et merci encore ! :)
Dam`s
0
mamiemando Messages postés 33372 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 novembre 2024 7 802
7 mai 2009 à 21:28
De rien, et bonne soirée ;-)
0