Dessiner un cercle à partir d'un quadrillage ?

Répondre
Partager Rechercher
Re: Dessiner un cercle à partir d'un quadrillage ?
Citation :
Provient du message de Coin-coin le Canapin
(je suis très clair je sais)
C'est peu dire , limite je me demande si le titre n'est pas plus explicite.

Sinon en relisant ton message je crois commencer à comprendre. Il ne suffit pas de trouver pour une hypothénuse donnée (le rayon du cercle) les coordonnées des carrés permettant de trouver cette hypothénuse (grâce à pythagore) ?

Ouh là j'éspère que je suis plus clair que toi .
Citation :
Provient du message de Coin-coin le Canapin
le nain ça c'est évident mais je cherche une réponse moins "graphique" et applicable par exemple en programmation

Coin-coin, on ne peut plus clair que de la vase.
chaque carré est défini par un centre il me semble.
En programation, tu dois pouvoir définir par leurs coordonnées tout les carrés se situant à tel distance de ton carré central.

je ne suis pas programmeur, mais si ça peut t'aider, sinon ben désolé
Citation :
Provient du message de Coin-coin le Canapin
le nain ça c'est évident mais je cherche une réponse moins "graphique" et applicable par exemple en programmation

Coin-coin, on ne peut plus clair que de la vase.
Y'a pas des fonctions en informatique qui permettent de calculer directement les points d'un cercle ?

Sinon y=(x²-r²)^(1/2) et y=-(x²-r²)^(1/2) permettent de tracer 2 demi-cercles (où r est ton rayon) qui au final forment 1 cercle.
facile !

Tu redéfini ton espace géométrique en reposant des lois qui disent ce que tu veux qu'elles disent.


A toi de trouver les bonnes lois pour qu'a partir d'un carré, un autre carre dessiné dedans forme la définition de ce que tu aura défini comme un cercle (par exemple).
Ou alors une loi qui dise que la diagonale du carré forme deux cercles d'aire egales.
Qui ca choque un cercle avec un angle droit?


Bon, faut se refaire les postulats de base d'une géométrie canapienne, mais j'ai tenté à un moment, et c'est assez marrant... et tu pourra toujours le presenter lorsque tu fera ta these de mathématiques pure.

J'avais défini un espace ou toute forme ne pouvait etre constitué que de parallèles.... avec de l'aide (beaucoup, j'avoue), je l'ai mit en place, ca donne des migraines, ca sert à rien, mais c'est rigolo
(oui, je m'emmerde le week end des fois)
Tu calcules la distances des 4 points du carré au centre du cercle.

Si les 4 sont plus petites que le rayon, c'est dans le cercle.

Si 3 sont plus petites que le rayon, le carré est majoritairement dans le cercle.

Sinon c'est en dehors ou majoritairement en dehors.

En tout cas, c'est l'algo qui me vient comme ça, il doit y avoir plus précis pour les cas tangents.

Evidemment, si tes carrés sont très grands par rapport au cercle, le résultat sera baclé, mais y'a pas de solution miracle.
Pour tracer un cercle, on utilise une généralisation de l'agorithme de Bresenhan, qui est l'algorithme optimal pour tracer un segment de droite discret

Par symétrie, il suffit de tracer 1/8 de cercle : par exemple la portion dans le 2e octant, c'est-à-dire à gauche de l'axe (x=0) et au-dessus de l'axe (x=y).

Cette portion de cercle a sa dérivée comprise entre 0 et 1.
Ce qui veut dire que deux points d'abscisse distante de p auront leurs ordonnées distantes de moins de p. (ce qui est vrai pour p = taille d'un pixel)

L'idée de l'algorithme est alors de calculer l'ordonnée associée à chaque abscisse discrète, et on sait que le point calculé à l'abscisse suivante sera connexe (en 8-connexité, c'est-à-dire horizontale, verticale ou diagonale)

Pour calculer l'ordonnée, il suffit d'utiliser pythagore. Mais cette formule donne un nombre réel, et pas forcément un entier.

Deux solutions :
  • prendre l'entier le plus proche.
    Le problème est que l'on va avoir un effet d'escalier.
  • anti-aliasing : on «allume» en fait 2 pixels, celui à l'arrondi inférieur et celui à l'arrondi supérieur.
    On leur affecte un niveau de gris proportionnel à la proximité du point «réel»

Voilà, j'espère que c'est clair Pour plus d'infos, fais une recherche sur google de Bresenhan tu devrais trouver tout ce que tu veux

PS : oublié de préciser, mais c'est pas forcément évident...
les coordonnées de l'intersection du cercle de rayon R avec la 1ère bissectrice sont (R/√2, R/√2)
Il faut donc parcourir en abscisse les entiers entre 0 et R/√2.

PPS : pendant que j'y suis... cet algorithme a une complexité linéaire en le rayon du cercle (O(R)), contrairement aux algorithmes proposés ci-dessus qui nécéssitent de tester tous les pixels du carré englobant le cercle, et ont donc une complexité quadratique (O(R2))
Lango Silma, ton algo il marche pour des carrés composés de plusieurs pixels ?

En effet, un pixel est soit dedans, soit dehors, car on ne tient pas compte de sa surface, ce qui n'est pas le cas avec des carrés.

Dans le cas de Coin-Coin, il s'agit plutôt d'un problème de maillage d'un cercle 2D à partir d'une grille de référence.
Citation :
Provient du message de Llewellen
Lango Silma, ton algo il marche pour des carrés composés de plusieurs pixels ?

En effet, un pixel est soit dedans, soit dehors, car on ne tient pas compte de sa surface, ce qui n'est pas le cas avec des carrés.
Je ne vois pas tellement ce que tu apelles «carrés de plusieurs pixels»...

Citation :
Dans le cas de Coin-Coin, il s'agit plutôt d'un problème de maillage d'un cercle 2D à partir d'une grille de référence.
Ce que tu apelles noeud du maillage, j'apelle ça pixel. Les deux problèmes sont parfaitement équivalents.

À moins bien entendu que je n'aie pas compris ce que demande CoinCoin... Il faut dire que j'ai du mal à imaginer comment il aurait pu être moins clair...
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés