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

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);
}
//---------------------------------------------------------------------------
X, Y, XCentre, YCentre sont des entiers, variable de ma Form.

Est-ce quelqu'un vois d'où peut venir le problème

Merci d'avance[/code]