Bonjour à tous
pour vous expliquer mon problème, j'ai simplifier mon programme.
Je désire afficher un point qui effectue une rotation autour du centre de l'écran.
Mon problème est que cette rotation ne se passe pas correctement, le point converge vers le centre de l'écran.
Voici mon programme
X, Y, XCentre, YCentre sont des entiers, variable de ma Form.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { // Calcul les coordonnées du centre de l'écran XCentre = (Screen->Width / 2); YCentre = (Screen->Height / 2); // On fixe les coordonnées du point au départ de la cible X = XCentre + 100; Y = YCentre; } //--------------------------------------------------------------------------- // Méthode déclancher lorsque l'on presse une touche void __fastcall TForm1::OnKeyPress(TObject *Sender, char &Key) { // SI l'on presse la touche esc if(Key == VK_ESCAPE) { // On quitte l'application Application->Terminate(); } } //--------------------------------------------------------------------------- void __fastcall TForm1::OnPaint(TObject *Sender) { // On fixe les couleurs pour l'arrière-plan Form1->Canvas->Brush->Color = clWhite; Form1->Canvas->Pen->Color = clWhite; // On dessine l'arrière-plan Form1->Canvas->Rectangle(0, 0, ClientWidth, ClientHeight); // On fixe les couleurs pour la cible Form1->Canvas->Brush->Color = clRed; Form1->Canvas->Pen->Color = clRed; // On dessine la cible Form1->Canvas->Ellipse((X - 20), (Y - 20), (X + 20), (Y + 20)); } //--------------------------------------------------------------------------- // Méthode de translation void TForm1::Translation(int Xt, int Yt) { // On calcule le nouveau X X += Xt; // On calule le nouveau Y Y += Yt; } // Méthode de rotation void TForm1::Rotation(double AngleDeg) { // Coordonnées du point après la rotation double xr, yr; // Angle de rotation en radiant double AngleRad; // On convertit l'angle exprimé en degré en radiant AngleRad = AngleDeg * (M_PI / 180); // On ramène le point à l'origine Translation(-XCentre, -YCentre); // On calcule les coordonnées du point après la rotation xr = (X * cos(AngleRad)) + (Y * sin(AngleRad)); yr = (X * (sin(AngleRad) * -1)) + (Y * cos(AngleRad)); // On affecte le nouveau point X = xr; Y = yr; // On ramène le point au centre de l'écran Translation(XCentre, YCentre); } // Méthode déclancher lorsque le timer arrive à expiration void __fastcall TForm1::OnTimer(TObject *Sender) { // On effectue la rotation Rotation(1); // On réaffiche l'écran OnPaint(Form1); } //---------------------------------------------------------------------------
Est-ce quelqu'un vois d'où peut venir le problème
Merci d'avance[/code]
Partager