Equation pour ligne et cercle - Algorithme ?

jmlucienvb Messages postés 129 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 12 février 2009 - 23 juil. 2004 à 19:21
Vb Lover Messages postés 221 Date d'inscription vendredi 30 novembre 2001 Statut Membre Dernière intervention 13 février 2010 - 8 août 2004 à 17:51
Quelle est la meilleure méthode pour tracer un cercle dont on connait les coordonnées du centre et le rayon, sachant qu"après on doit balayer tout l'interieur du cercle avec une ligne (Correspondant à un rayon) qui tourne autour du centre du cercle.
L'objectif étant de tester chaque pixel contenu à l'intérieur du cercle pour le coloriser rouge ou vert en fonction d'un critère.
Exemple :
Je prend un point au hasard sur ma form
Le prog trace un cercle de rayon 100 pixels autour de mon point
Je me place sur le cercle sur un point précis
je trace une première ligne virtuelle entre le centre et ce point
Je vérifie chaque pixel sur cette ligne
Puis je prend le point suivant sur mon périmètre du cercle
Je trace une nouvelle ligne
Je vérifie tous les pixels de cette nouvelle ligne...
Etc jusqu'a faire tout le périmètre du cercle...
En fait il me faudrait savoir comment faire une équation pour tracer et suivre le périmétre de mon cercle et pour faire ma ligne baladeuse...
Si quelqu'un à une idée...
Merci d'avance...
;) Poète et cheminant
mon VB dans le sac à dos
A voir également:

5 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
23 juil. 2004 à 20:11
equation cartesienne d'un cercle :
(x-a)²+(y-b)²=R²
avec (a,b) les coordonnées du centre et R le rayon.

mais ton principe me parait pas bon du tout.

imagine toi un grand cercle, autour de ton centre tu auras 8 pixel alors que le cercle fait plus de 8points en tracant ta mulitude de rayon, tu vas repeter trop de fois le meme travail, donc pert de performance ...

la solution que je te propose c'est de faire des maths, deux solutions, je sais pas laquelle est la moins fatigante pour l'ordi. tu veux verifier que ton point apparitient au cercle tu as les coordonnés de ton point P(A,B) et du centre O(X,Y)
donc tu resoud verifies cette equation :
(x-A)²+(Y-B)²<R² si c'est vrai ton cercle est à l'interieur rajoute =< pour accepter ton cercle sinon une autre méthode
tu as les coordonnés de tes deux points tu calculs la distance : rac((A-X)²+(B-Y)²) avec le rayon de ton cercle ...

je suis pas sur pour l'expression carthesienne du cercle: sur les signes -

je sais pas si je repond à ta question, mais je trouve que ma facon est un peu plus intelligente pour verifier que ton point appartient au disque ...
comme koi les maths peuvent servir :D

pour tracer un cercle, tu peux aussi te servir du sinus et cosinus

for i as integer 0 to 2pi step = pi/100
X=sin(i)
Y=cos(i)
next
bien sur faut que tu te regles en radian sinon tu fais de 0 à 360°

@+

Cyril
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
23 juil. 2004 à 20:25
Bonjour

Soit le cercle de rayon R et de centre C dont les coordonnées sont (Xc, Yc)
Soit le point P de coordonnées (Xp, Yp).

La distance CP = Sqr((Xp - Xc) ^ 2 + (Yp - Yc) ^ 2)
ou bien CP² = (Xp - Xc) ^ 2 + (Yp - Yc) ^ 2
P est sur le cercle si et seulement si CP R (ou CP² R²)

P est "dans" le cercle si et seulement si CP < R.

Petite question : ton "balayage" doit-il être fait obligatoirement par un rayon ?
0
jmlucienvb Messages postés 129 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 12 février 2009
23 juil. 2004 à 20:33
Je comprend bien ce que tu veux dire, même si mes math remonte à terminale c en 1968...
Mon problème c'est que je dois procéder à une vérification pour chaque point situé à l'intérieur du cercle :
Imagine que le centre soit un radar qui balaye sa zone (le cercle final).
La transcription à plat est couplée avec une table 3D qui me donne pour chaque point son altitude réelle.

Lorsqu'un point à l'intérieur du cercle se trouve en réel plus élevé que le centre (radar), il crée un zone d'ombre entre lui et le périmè_tre du cercle sauf si des moints sont plus élévés que lui ...
Enfin j'espère que je m'explique bien...
C'est pour cela que j'avais l'idée de balayé mon intérieur de cercle en utilisant les rayons...
Chaqiue point en s'éloignant du centre est ou plus bas que le centre ou plus haut.
Si plus haut les suivants seront cachés sauf s'ils sont encore + haut...etc...
Voila mon problème...
Enfin merci de ta réponse, je vais déja essayer de créer le cercle etje suis preneur de toutes idées nouvelles pour avancer ce porog
Amicalement
JM
;) Poète et cheminant
mon VB dans le sac à dos
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
23 juil. 2004 à 20:46
Bonjour
Pourquoi ne pas balayer par une ligne "horizontale" ?
Le centre ayant pour coordonnées (Xc, Yc) et le rayon étant R :
For y = Yc - R To Yc + R
  For x = Xc - R To Xc + R
    If (y - Yc) ^2 + (x - Xc) ^ 2 <= R * R Then
       ' Le point (x, y) est dans le disque => traitement
    End If
  Next x
Next y
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Vb Lover Messages postés 221 Date d'inscription vendredi 30 novembre 2001 Statut Membre Dernière intervention 13 février 2010 5
8 août 2004 à 17:51
Sympa ton problème jmlucienvb !

il n'y a d'après moi pas d'autre méthode que la tienne pour faire ton programme. Le seul problème qui se pose, c'est le passage discret->continu (càd de combien tourner tes rayons pour parcourir tous tes pixels).

Pour t'aider tout de suite, voici les équations de tes rayons :

x = x0 + k * cos(alpha)
y = y0 + k * sin(alpha)

avec 0 <= alpha <= 2 Pi, (x0,y0) le centre de ton cercle et k un paramètre variant de 0 à R.

Le problème qui te reste à résoudre, c'est de choisir des alpha et des
k qui passent par tous tes pixels, mais sans faire trop de travail.

Un point crucial pour optimiser ton système, c'est de savoir comment sont stockées tes altitudes sur la carte. Car tu pourrais ensuite inverser le problème : au lieu de faire tous les rayons, tu regardes quels points sont plus haut que ta position, et ensuite seulement tu mets en couleur les parties concernées

VB Lover
0
Rejoignez-nous