begin process at 2012 02 11 16:32:07
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Divers

 > 

Débutant(e)

 > 

Dessin d'ellipse inclinée


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Dessin d'ellipse inclinée

mardi 13 juillet 2010 à 09:38:48 | Dessin d'ellipse inclinée

Nyio

Bonjour à tous,

Je dois tracer sur un bmp le périmètre d'une ellipse dont je connais les coordonnées en X et Y du centre, les deux longueurs des diagonales et son angle d'inclinaison. La rotation se fait par rapport au cente de l'ellipse

j'ai déjà testé la méthode Arc en utilisant la matrice de rotation pour déterminer la position des points après rotation mais il semblerai que cette méthode ne permet de tracer que des ellipses horizontales. Même soucis avec la méthode ellipse qui en plus remplie l'intérieur de l'ellipse (après j'ai pas cherché à supprimer le remplissage vu que l'ellipse n'était pas bonne).

Si vous avez une solution ou un début de piste n'hésitez pas, je suis preneur.

Je pensais tracer la courbe conique de mon ellipse à partir de l'équation, est-ce possible sous delphi?

Merci d'avance.

Nyio
mardi 13 juillet 2010 à 14:03:18 | Re : Dessin d'ellipse inclinée

pseudo3

Réponse acceptée !
Salut,

Pour commencer avec le cas d'une ellipse horizontale centrée en x=0 et y=0 on sait que dans ce cas on a :
x = a.cosinus(t)
y = b.sinus(t)
avec a = (largeur/2) >= b = (Hauteur/2)

Donc pour une Ellipse centrée en xo,yo et inclinée de Incli Radians les coordonnées d'un point du contour sont de la forme :

x = xo + a.sinu(t + Incli)
y = yo + b.sinus(t + Incli)

Y'a plus qu'à tracer cela par exemple en 360 points par exemple reliés par LineTo(x,y) ou bien mémorisés dans un array of tPoint nommé MonEllipse et comme un array de tPoint c'est rien d'autre qu'un polygone ça peut se tracer en une seule ligne avec MonCanvas.Polygon(MonEllipse).

MonCanvas désigne ici soit le canvas d'une Form soit le canvas de n'importe quoi comme celui d'un Bmp par exemple.

Pour plus de détails sur les ellipses ou d'autre courbes, voir ici : [ Lien ]

A+.
mardi 13 juillet 2010 à 14:33:11 | Re : Dessin d'ellipse inclinée

pseudo3

Re-salut,

Oups : y'a une faute de frappe dans mon message précédent :

Prière d'y remplacer x = xo + a.sinu(t + Incli)
par x = xo + a.cosinus(t + Incli)

A+.
mardi 13 juillet 2010 à 15:14:17 | Re : Dessin d'ellipse inclinée

Nyio

Réponse acceptée !
J'ai réussi à obtenir ce que je voulais, je vous donne mon code comme exemple :

Code Delphi :
// Rx et Ry sont les longueurs de mes demi-diagonales
// phi mon angle de rotation
for i:= 0 to 360 do begin
//-- Calcul du vecteur 
    Rxx := Rx * sin(i*PI/180+phi);
    Ryy := Ry * cos(i*PI/180+phi);
//-- On applique la matrice de rotation par rapport au centre de coordonnées Cx,Cy au vecteur
    xx :=  Cx + (Rxx*cos(Phi) -  Ryy*sin(phi));
    yy :=  Cy + (Rxx*sin(Phi) +  Ryy*cos(phi));
//-- On mémorise les coordonnées du point
    MonEllipse[i].x := xx;
    MonEllipse[i].y := yy;
end;
Polygon(MonEllipse); // On trace notre ellipse
mardi 13 juillet 2010 à 16:22:43 | Re : Dessin d'ellipse inclinée

pseudo3

Re-bonjour,

Je viens de me rendre compte que je m'étais un peu planté dans mes formules j'ai oublié allègrement la matrice de rotation mais l'essentiel c'est que ça marche chez toi.

A+.
mardi 13 juillet 2010 à 17:08:38 | Re : Dessin d'ellipse inclinée

pseudo3

Re-bonjour,

Tiens pour le fun, sur le même modèle, code pour le dessin d'un coeur incliné :

procedure TraceCoeur(bmp : tBitMap; Ro,cx,cy,IncliDeg : integer; clBord : tColor);
// Ro = rayon du coeur
// cx,cy = coordonnées du centre de rotation de l'ellipse
// IncliDeg = inclinaison en degrés du coeur par rapport à la verticale
// clBord = couleur du contour
var i : integer; iRad,Theta: Single; MaCourbe : Array [0..359] of tpoint;
Rxx,Ryy,xx,yy : single;
begin with bmp.canvas do begin
pen.width:=1; pen.color:=clBord; brush.style:=bsClear;
iRad:=DegToRad(IncliDeg);
for i:= 0 to 359 do begin
//-- Calcul du vecteur du Coeur avec Formule de Raphaël Laporte
Theta := i*PI/180+iRad;
Rxx := Ro*sin(Theta)*sin(Theta)*sin(Theta);
Ryy := Ro*(cos(Theta) - cos(Theta)*cos(Theta)*cos(Theta)*cos(Theta));
//-- Application de la matrice de rotation par rapport au centre cx,cy
xx := cx + (Rxx*cos(iRad) - Ryy*sin(iRad));
yy := cy - (Rxx*sin(iRad) + Ryy*cos(iRad));
//-- Mémorisation des coordonnées du point
MaCourbe[i].x := round(xx);
MaCourbe[i].y := round(yy);
end;
Polygon(MaCourbe); // On trace notre ellipse
end;
end;

A+.
mardi 13 juillet 2010 à 17:11:24 | Re : Dessin d'ellipse inclinée

pseudo3

Re,

Oups, encore une erreur de copier-coller :

Remplacer Polygon(MaCourbe); // On trace notre ellipse
par Polygon(MaCourbe); // On trace la courbe.

A+.
lundi 22 novembre 2010 à 15:55:49 | Re : Dessin d'ellipse inclinée

moukfif


Slt,

et comment faire svp pour dessiner la courbe pleine?.


Cordialement,


lundi 22 novembre 2010 à 17:12:24 | Re : Dessin d'ellipse inclinée

pseudo3

Salut,

Pour dessiner la courbe pleine :

placer : SetPolyFillMode(Handle,WINDING);
juste avant : Polygon(MaCourbe);

A+.
mardi 23 novembre 2010 à 11:23:43 | Re : Dessin d'ellipse inclinée

pseudo3

Re-salut,

En plus du SetPolyFillMode il faudra également initialiser la Brush :

1) pour un remplissage couleur : brush.style:=bsSolid; brush.color:=clRed par exemple.
2) ou pour un remplissage avec un bitMap de texture : BrushBitmap:=MonBitMap;

A+.

1 2

Cette discussion est classée dans : dessin, méthode, rotation, tracer, ellipse


Répondre à ce message

Sujets en rapport avec ce message

dessin sur un bitmap [ par jlg75 ] J'ai commencé un petit prog de dessin pour mes débuts en DELPHI.Je dessine sur un bitmap (feuille blanche pour l'instant),chargé dans une TImage. J'ut Image dans une TStatusBar !!! [ par MAsterC ] Comment fait-on pour mettre un Tprogresbar et un petit dessin dans l'item TStatusBar ????POUR PLUS DE DÉTAILS ALLER VOIR DANS INTERNET EXPLORER EN BAS Exécution d'une méthode incluse dans un package PL/SQL [ par DeadSoul ] Bonjour,Voici mon problème :Je désire exécuter une méthode PL/SQL incluse dans un package OracleJe connais l'existence de la classe TStoredProcedure, Affichage écran de demarrage [ par lirva ] Bonjour,J'ai suivi la méthode de l'aide pour afficher une Form pendant 3 secondes au démarrage de mon appli :procedure TForm1.FormActivate(Sender: TOb Ajouter OnKeyPress à un TPaintBox [ par jlg75 ] J'utilise un TPaintBox pour un programme de dessin, je voudrais qu'il réagisse à l'événement OnKeyPress (ou OnKeyDown) pour sortir de la fonction dess Appel d'une Form [ par apz ] salut, pour appeler une form, certains utilisent la méthode suivante : ------------------------------------------------------------Form1.Show--------- CreateParented et rafraichissement ... [ par almi ] Bonjour à tous,Je cherche à créer un ToolBox dans une application de dessin que je n'ai pas conçu.Pour ce faire, j'utilise la méthode CreateParented e grille de dessin [ par ghassenus ] salut bein je suis débutant en delphi et je souhaite crééer une grille de dessin ( comme papier millimetré )je voudrait que le crayon de dessin ait un Choisir la piste d'un cd audio [ par alexistoulotte ] Est-ce que qqn connait une méthode pour aller directement a la piste d'un cd audio que l'utilisateur a choisi (par un edit par exemple).Merci d'avance dessiner sur un flux vidéo [ par lupoo ] hello,je n'arrive pas à faire apparaître du dessin sur l'image vidéo, elle s'impose toujours par dessus le dessin...comment faire pour inverser cela?m


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,900 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales