Points d'accroche d'un arc de cercle (canvas.arc) [Résolu]

Messages postés
137
Date d'inscription
dimanche 7 juillet 2002
Dernière intervention
11 janvier 2009
- - Dernière réponse : cs_Kenavo
Messages postés
759
Date d'inscription
vendredi 21 mars 2003
Dernière intervention
1 octobre 2009
- 9 mars 2006 à 10:09
Bonjour,


J'utilise la fonction canvas.arc pour dessiner une partie de cercle, et j'aimarais connaître les points de début et de fin de cet arc.


Quelqu'un peut-il m'aider ?


Merci
Orélien.
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
759
Date d'inscription
vendredi 21 mars 2003
Dernière intervention
1 octobre 2009
3
Merci
Salut Orelien

Ca tient plus de la géométrie que de Delphi !!!

Si tu notes X0 et Y0 les coordonnées du centre du cercle, R le rayon et X et Y les coordonnées du point que tu cherches, tu peux écrire :
- (X-X0)²+(Y-Y0)² = R² (point sur le cercle)
- (X-X0)x(Y3-Y0) = (Y-Y0)x(X3-X0) (point sur la droite qui passe par (X0,Y0) et (X3,Y3) )

Et avec tout ça tu trouves ta solution !

Et comme je suis dans un bon jour, je te continue ! Je passe quand même sur la partie mathématique, faut pas exagérer ....

Pour le premier point ça peut donner (solution générale) :

var
X1,X2,X3,X4,Y1,Y2,Y3,Y4,X,Y : Integer;
X0,Y0, R,A : Real;
begin
....
X0: = (X1+X2) / 2; // Centre
Y0:= (Y1+Y2) / 2;
R := Abs(X2-X1) div 2; // Rayon
....
A : = (Y3-Y0)/(X3-X0); // pente du rayon définissant le point de départ

X:= round(R /sqrt(1+sqr(A)) + X0);
if X3<X0 then // sur un diamètre il y a deux points il faut choisir le bon
X: = round(2*X0-X);
Y:= round( (X-X0)*A + Y0);
....
end ;

et le second point en remplaçant X3 et Y3 par X4 et Y4

A toi de faire gaffe aux cas particuliers donnant une belle erreur pour division par zéro !

Ken@vo
<hr size ="2" width="100%">Code, Code, Codec !

[%3C/body ]

Merci cs_Kenavo 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_Kenavo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.