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

cs_orelien 137 Messages postés dimanche 7 juillet 2002Date d'inscription 11 janvier 2009 Dernière intervention - 8 mars 2006 à 18:21 - Dernière réponse : cs_Kenavo 759 Messages postés vendredi 21 mars 2003Date d'inscription 1 octobre 2009 Dernière intervention
- 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
cs_Kenavo 759 Messages postés vendredi 21 mars 2003Date d'inscription 1 octobre 2009 Dernière intervention - 9 mars 2006 à 10:09
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 71 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.