Rotation d'une cible autour du centre de l'écran
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:
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]