Les Snippets

Connexion

Coordonnées des sommets d'un triangle équilatéral dont on connait le centre, la longueur d'un côté et l'angle du 1er sommet

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 16/10/2007 20:15:29 et initié par Jean_Jean [Liste]
Date de mise à jour : 22/10/2007 22:45:44
Vue : 2744
Catégorie(s) : Maths, Trucs & Astuces, Algorithme, Divers, Graphique
Langages dispo pour ce code :
- Delphi 5



Langage : Delphi 5
Date ajout : 16/10/2007
Posté par Jean_Jean [Liste]
DateMAJ : 22/10/2007
type
  TTriPoints = array[0..2] of TPoint;

const
  cDegToRad  = Pi/180;    // A(Rad) = A(Deg)*(Pi/180)
  cSqrt3div3 = sqrt(3)/3; 

// import de Math.pas , voir aide delphi "SinCos"
procedure SinCos(const Theta: Extended; var Sin, Cos: Extended);
asm
  FLD     Theta
  FSINCOS
  FSTP    tbyte ptr [edx]    // Cos
  FSTP    tbyte ptr [eax]    // Sin
  FWAIT
end;

{-- RotPt2DToPt ---------------------------------------------------
Rotation d''un Point (2 Dimensions) autour du centre de gravité d''une figure
géométrique suivant une rotation de gauche à droite (convention mathématique) :
                              2  |  1
                            _____|_____
                                 |
                              3  |  4
parametres :
  Center [I] TPoint, centre de la rotation
  Pt     [I] TPoint, coordonées du point
  Angle  [I] Single, angle de rotation en degrés
retour :
  TPoint, nouvelle coordonnées du point 
-------------------------------------------------------------------------------}
function RotPt2DToPt(const Center, Pt: TPoint; const Angle: single): TPoint;
 Var VSin,VCos,VRad : Extended;
    MPCX, MPCY : integer;
Begin
  VRad := Angle * cDegToRad;
  SinCos(VRad, VSin, VCos);
  MPCX := Pt.X - CG.X;
  MPCY := Pt.Y - CG.Y;
  Result.X := Round( MPCX * VCos + MPCY * VSin ) + CG.X;
  Result.Y := Round( MPCY * VCos - MPCX * VSin ) + CG.Y;
End;


{-- FCooPt0TRIequi2d  ------------------------------------------------------------
 Calcule les coordonnées des trois sommets d'un triangle Equilatéral en 2D
 Le premier sommet est dirigé vers la gauche horizontalement
parametres
  Center [I] TPoint, centre de la figure
  Len    [I] Integer, longeur du cotés
retour :
  TTriPoints
-------------------------------------------------------------------------------}

Function FCooPt0TRIequi2d(const Center: Tpoint; const Len: Integer): TTriPoints;
 var R : extended;
begin
  R := L * cSqrt3Div3;
  Result[0].X := Round(CG.X + R);
  Result[0].Y := CG.Y;
  Result[1].X := Round(CG.X - R / 2);
  Result[1].Y := Round(CG.Y + L / 2);
  Result[2].X := Result[1].X;
  Result[2].Y := Round(CG.Y - L / 2);
end;


// Rotation du triangle
{-- FCooPtTRIequi2d  ------------------------------------------------------------
 Calcule les coordonnées des trois sommets d'un triangle Equilatéral en 2D
 Les sommets sont décalés de Angle degrés dans le sens conventionnel
parametres :
  Center [I] TPoint, Centre de la figure 
  Len    [I] integer, Longueur d'un côté
  Angle  [I] single, angle en degrés
retour :
  TTriPoints
-------------------------------------------------------------------------------}
Function FCooPtTRIequi2d(const Center: Tpoint; const Len: Integer; 
                         const Angle: single): TTriPoints;
var TriOrg : TTriPoints;
begin
  {triangle 1ère pointe à droite horizontalement}
  TriOrg    := FCooPt0TRIequi2d(Center, Len);
  Result[0] := RotPt2DToPt(Center, TriOrg[0], Angle);
  Result[1] := RotPt2DToPt(Center, TriOrg[1], Angle);
  Result[2] := RotPt2DToPt(Center, TriOrg[2], Angle);
end;


//Exemple d'utilisation pour le tracé
{ TRIANGLE ---------------------------------------------------------------------
 parametres :
    Center     [I] TPoint, Centre de la figure
   Len        [I] integer, Longueur du côté
   PenWidth   [I] integer, Epaisseur de la ligne entourant la figure
   Angle      [I] single,  Angle de rotation dans le sens gauche à droite en degré
   Canvas     [I/O] TCanvas, Canvas désigné sur laquelle la figure sera dessinée
   PenColor   [I] TColor, Couleur du trait extérieur
   BrushColor [I] TColor, Couleur intérieure
 ------------------------------------------------------------------------------}
procedure Draw_Triangle(const Center: TPoint; const Len, aPenWidth : integer; 
                        const Angle : single; Canvas : TCanvas; 
                        const PenColor, BrushColor: Tcolor);
var NvC : TTriPoints; // coordonnées des 3 sommets
begin
  Nvc := FCooPtTRIequi2d(Center, Len, Angle);
  With Canvas do
  begin
    Pen.Color   := PenColor;
    Pen.Style   := psSolid;
    Brush.Color := BrushColor;
    Brush.Style := bsSolid;
    Pen.Width   := PenWidth;
    Polygon(NvC);
  end;
end;

Snippets en rapport avec : Rotation, Triangle, Coordonnées, Sommet, Tracé



Codes sources en rapport avec : Rotation, Triangle, Coordonnées, Sommet, Tracé

{Visual Basic, VB6, VB.NET, VB 2005} ROTATION D'UN TRIANGLE (SANS OPENGL/DIRECTX)
Il faut >>Une form >> Un timer ...

{Javascript / DHTML} CURSEUR QUI POINTE LA SOURIS
Dans la série des codes pas très utiles mais qui font toujours effet (dans un menu circulaire par ex...

{Javascript / DHTML} THÉORÈME DE PYTHAGORE ET SA RÉCIPROQUE
Ce code représente le théorème de pythagore et sa réciproque, je ne suis pas sur qu'il plaise a tout...

{Flash} REDIMENSIONNER ET TOURNER UN CLIP A L'AIDE DES FLECHES
soit un clip sur la scene que l'on peut deplacer avec la souris. On peut egalement avec les fleches ...

{Delphi} ROTATION (RAPIDE) DE BITMAP (À 360°) EN PUR GDI
Exemple simple de rotation de bitmap en pur GDI Ceci est possible grâce à l'utilisation de la fon...

{JAVA / J2EE} TRIANGLE D'ÉTOILES
Le programme invite l'utilisateur à rentrer un nombre entier, correspondant aux nombre de lignes. Pl...

{Visual Basic, VB6, VB.NET, VB 2005} TRAIT SUR USF VBA
Pour repondre GRATUITEMENT à ma question posee sur le forum il y a 2 jours, voici la réponse. Contr...

{C / C++ / C++.NET} TRIANGLE DE PASCAL ET DEVELLOPEMENT DE POLYNOME
Alors voilà il y a une semaine je me suis mis a chercher une source c++ toutes faites me permettant ...

{PHP} LONGUEUR DE L'HYPOTENUSE, LE TRIANGLE EST-IL RECTANGLE PYTHAGORE
Ce script comprend 2 fonctions : -calculer la longueur de l'hypoténuse d'un triangle rectangle : fo...

{Flash} FAIRE TOURNER UN TABLEAU (ARRAY)
Il est parfois utile ou nécessaire de faire 'tourner' un Array, c'est à dire de décaler tout le cont...