Coordoonées des points d'un cercle

Discutez d'informatique ici !
museforever
Messages: 8
Enregistré le: 21 Avr 2008, 22:41

Coordoonées des points d'un cercle

par museforever » 21 Avr 2008, 23:05

Bonjour à tous.

Je suis en train de programmer un logiciel de traitement d'image et je bloque sur quelque chose.

Je dois appliquer un masque qui à la forme d'un cercle. Le rayon de ce cercle et son centre sera choisi par l'utilisateur.

Tout d'abord, il faut visualiser une image comme un tableau à 2 dimensions (un tableau en c++ est en fait une "grille". Chaque case à une certaine valeur et on accède à cette case en précisant son abscisse et son ordonnée).

Ma méthode pour afficher le cercle sur l'écran serait la suivante :

-L'utilisateur précise le rayon et la position du cercle
-Je calcule les coordonnées de chaque case où passe le cercle et je remplace la case par du noir. Ainsi, ces cases formeront un cercle noir.

On va partir du cas où le cercle ne sort pas de l'image.

J'espère que vous avez compris mon problème. Je tiens à préciser que les coordonnées des cases sont forcément des entiers (donc il faudra arrondir).

Ceci est un problème de maths et pas de programmation. Je cherche juste une méthode pour calculer les coordonnées des points d'un cercle.

Et au fait, un ordinateur ça calcule très vite, donc il ne faut pas hésiter à proposer une méthode un peu "bourrin".

Merci d'avance !



alavacommejetepousse
Membre Irrationnel
Messages: 1667
Enregistré le: 28 Fév 2008, 17:23

par alavacommejetepousse » 21 Avr 2008, 23:36

bonsoir

tu connais l'équation d 'un cercle ?

museforever
Messages: 8
Enregistré le: 21 Avr 2008, 22:41

par museforever » 22 Avr 2008, 02:34

Bonsoir.

J'ai fais un bac S (je suis en IUT réseaux & télécoms actuellement).

J'ai des vagues souvenirs sur l'équation d'un cercle. Je me souviens que c'est égal à r^2, je dirai que c'est (x-xo)^2 + (y-yo)^2 = r^2, mais je pense que je me trompe. Je l'ai dans mes cours de maths de l'année dernière, je vérifierai.

Mais je ne vois pas trop comment l'utiliser pour mon problème, mais ça doit être une bonne piste.

Merci de m'éclaircir :id:

Edit :

Après une petite réflexion, si j'isole une des inconnues (y par exemple), en faisant varier x je pourrai peut-être obtenir de cette façon tous les points du cercle ?

Edit 2 : On utilise des complexes pour l'équation d'un cercle non ? Parce que ça risque de poser un très très gros problème, je ne peux travailler que sur R ... Et j'ai pas très envie de coder Matlab dans mon programme (et surtout j'ai aucune idée comment faire :we: ).

Maxmau
Membre Irrationnel
Messages: 1149
Enregistré le: 19 Mar 2008, 11:11

par Maxmau » 22 Avr 2008, 09:05

Bj
Le cercle de centre (x0 , y0) et de rayon R admet le paramétrage :
x(t) = x0 + R cost , y(t) = y0 + R sint
Lorsque t varie entre 0 et 2;) le point (x(t) , y(t) ) décrit le cercle de centre (x0,y0) et de rayon R. A chaque valeur de t correspond un point du cercle

museforever
Messages: 8
Enregistré le: 21 Avr 2008, 22:41

par museforever » 22 Avr 2008, 13:13

Merci beaucoup pour ta réponse !

Je vais tester ça tout à l'heure, merci merci !

Patastronch
Membre Irrationnel
Messages: 1345
Enregistré le: 23 Aoû 2005, 00:53

par Patastronch » 22 Avr 2008, 13:14

museforever a écrit:Bonsoir.

je ne peux travailler que sur R ...


Non sur Q.

En ce qui concerne ta méthode d'affichage d'un cercle elle me parait tres limite. Tu vas devoir imposer un pas pour calculer les coordonnés de ton cercle (et oui t'es pas sur R mais sur Q, t'es pas en continue) du coup ce pas pourra "laisser des trous" s'il est trop grand. Et plus le rayon du cercle sera grand plus ton pas devra être petit. Le choix du pas me parait donc assez délicat, puisque pour un cercle trop grand tu ne pourras même pas choisir un pas suffisement petit à cause du trop grand nombre de calcul que ca pourrait demander pour tracer un simple cercle.
Je résume :
pas obligatoire car t'es dans espace d'énumération discret.
pas trop petit => trop de calcul
pas trop grand => trou dans le dessin du cercle


Donc plus simplement, utilise les librairies faites pour tracer une ellipse ou un cercle. Ca t'évitera de devoir bidouille pour faire quelque chose qui ne marche qu'a moitié et qui fait une tripotée de calculs inutile. Et les librairies c'est fait pour être utilisées :hum:

Si tu ne connais pas la fonction à utiliser, dit nous quelle librairie graphique tu utilises et on te diras la fonction a utiliser.

museforever
Messages: 8
Enregistré le: 21 Avr 2008, 22:41

par museforever » 22 Avr 2008, 14:40

Bonjour.

En fait c'est un projet à réaliser sur 9 semaines, avec des fonctions imposées. Dont celle "appliquer un masque qui est un cercle que l'utilisateur pourra placer".

Je m'étais déjà posé la question à propos du pas, mais vu à la vitesse à laquelle calcul un ordinateur, prendre un pas petit n'est vraiment pas un problème. De plus, notre logiciel n'est capable de traiter que des images inférieures ou égales à 640*480, ce qui fait que je n'ai pas besoin d'un pas très petit.

Je dois développer moi même mes fonctions, sinon il n'y a plus vraiment d'interêt au projet. Donc utiliser certaines librairies avec des fonctions toutes faites est hors de question :zen:

Patastronch
Membre Irrationnel
Messages: 1345
Enregistré le: 23 Aoû 2005, 00:53

par Patastronch » 22 Avr 2008, 15:50

museforever a écrit:Je m'étais déjà posé la question à propos du pas, mais vu à la vitesse à laquelle calcul un ordinateur, prendre un pas petit n'est vraiment pas un problème.

Quelle horreur d'entendre ce genre de chose ! Sache que la complexité d'un algorithme est justement toute la motivation de 95% des chercheurs en informatique. Tu travaille aujourd'hui sur des projet tres petit donc tu ne te rends pas compte a quel point gagner une opération par boucle peut parfois s'avérer tres important. En tous cas c'est une tres mauvaise habitude de travail de penser comme ca.

museforever a écrit:De plus, notre logiciel n'est capable de traiter que des images inférieures ou égales à 640*480, ce qui fait que je n'ai pas besoin d'un pas très petit.

Et donc ? y a des filtres sur les logiciels d'imagerie (meme les plus puissant) qui mettent enormément de temps a s'effectuer et cela meme sur des images tres petite. Encore une fois je te renvoie a la notion de complexité d'un algorithme.

museforever a écrit:Je dois développer moi même mes fonctions, sinon il n'y a plus vraiment d'interêt au projet. Donc utiliser certaines librairies avec des fonctions toutes faites est hors de question :zen:


Il y a encore moins d'interêt a recoder mal ce qui est deja bien codé. Le puissance de l'informatique aujourd'hui c'est justement la barriere d'abstraction, le fait qu'on construit des briques a partir d'autres briques deja pretes. Si on suit ton raisonnement jusqu'au bout, reprogramme la fonction sint et cost dont tu vas avoir besoin avec cette méthode, puisqu'il n'y a aucun interet a réutiliser ce qui est deja codé non ?

Patastronch
Membre Irrationnel
Messages: 1345
Enregistré le: 23 Aoû 2005, 00:53

par Patastronch » 22 Avr 2008, 16:02

Au passage un masque circulaire je doute fortement que ce soit tracer un cercle. Mais juste de savoir si un point est dans le cercle ou pas. C'est a dire une image dont la valeur d'un pixel vaut 0 s'il est hors du cercle et 1 sinon.Du moins c 'est la notion classique d'un masque.

Dans un tel cas il te faut juste vérifier si les coordonnées d'un point (x,y) de ton image vérifient (x-xo)^2 + (y-yo)^2 <= r^2
Si c 'est le cas alors le pixel prends la valeur 1 sinon le pixel prends la valeur 0.

Pourquoi 1 et 0 ? pour effectuer apres l'opération booléenne AND avec une autre image et obtenir l'image résultante masquée.

museforever
Messages: 8
Enregistré le: 21 Avr 2008, 22:41

par museforever » 22 Avr 2008, 18:17

Je pense que c'est hors sujet mais bon.

Je tiens à rappeler que je suis en IUT réseaux et télécommunications et qu'un logiciel de traitement d'image n'a rien à voir avec ma formation. C'est juste pour nous apprendre les bases du C++, d'où l'interêt de programmer nos propres fonctions.

On peut utiliser certaines libraires de base comme myconio.h, et je sais qu'une de ces libraires contient les fonctions sin et cos.

Ensuite pour l'histoire de l'algoritme, je sais que ce n'est pas judicieux de se contenter d'une solution approximative et pas du tout optimisée. Mais comme je tiens à le rappeler, je suis en iut r&t, pas en informatique. Nous faisons ce programme pour nous apprendre à mener un projet avec une équipe et nous familiariser avec le C++. Certains profs évitent de nous donner des solutions trop complexes en programmation car cela n'est pas le but de notre formation. Donc utiliser un algoritme qui n'est pas très optimisé n'est pas trop dérangeant.

Par exemple, j'ai du créer une fonction pour doubler la taille d'une image. Le rendu est correct mais bien moins bon des vrais logiciels de traitement d'image. Mais dans le fond ce n'est pas très grave, car ma fonction marche et ne rend pas un truc hideux.

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 8 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite