Forums Développement Multimédia

Aller au contenu

Monsieur Spi

Inscrit(e) (le) 10 Mar 2005
Déconnecté Dernière activité hier, 15:50 PM
*****

Sujets que j'ai initiés

Ellipses dans une grille

09 July 2017 - 16:48 PM

Bonjour,

C'est dimanche, je suis à plat...
Je cherche à dessiner des ellipses dans une grille en 2D.

Je suis parti de l'algorithme de Bresenham : http://rosettacode.o...ircle_algorithm
J'arrive à tracer des cercles, mais pas des ellipses, si vous avez une idée à propos d'un truc que j'aurai pu oublier...

Je calcule le radius avec une formule de calcul de la distance entre (x0,y0) centre du cercle et (x1,y1) position de la souris.

Je n'ai pas d'exemple de code de ce que j'ai fait à vous envoyer, c'est intégré dans un truc plus gros et j'ai trop la flemme de créer un exemple complet et fonctionnel.

Voilà néanmoins mon bout de code qui concerne cette partie :

// souris
let mx = e.pageX;
let my = e.pageY;

let that = this;

// centre du cercle
let x0 = this.rectTool.x;
let y0 = this.rectTool.y;
let radius = parseInt(Math.sqrt((my-y0)*(my-y0)+(mx-x0)*(mx-x0)));

// l'algo commence ici
var px = radius-1;
var py = 0;
var dx = 1;
var dy = 1;
var decisionOver2 = dx - (radius << 1);   // Decision criterion divided by 2 evaluated at x=r, y=0

// écriture dans la grille
var drawPixel = function (ppx,ppy) {
        that.toolcanvasgrid[ppx+ppy*C] = tileSelected.id;
};

while (px >= py) {
        drawPixel(px + x0, py + y0);
        drawPixel(py + x0, px + y0);
        drawPixel(-px + x0, py + y0);
        drawPixel(-py + x0, px + y0);
        drawPixel(-px + x0, -py + y0);
        drawPixel(-py + x0, -px + y0);
        drawPixel(px + x0, -py + y0);
        drawPixel(py + x0, -px + y0);
        if (decisionOver2 <= 0) {
                py++;
                decisionOver2 += dy; // Change in decision criterion for y -> y+1
                dy += 2;
        }
        if (decisionOver2 > 0) {
                px--;
                dx += 2;
                decisionOver2 += (-radius << 1) + dx; // Change for y -> y+1, x -> x-1
        }
}

Merci :)



EDIT : bah en l'écrivant je pense avoir mis le doigt sur le problème, c'est le radius qui semble poser souci, calculé comme je l'ai fait ca donne un cercle, il est égal partout...


EDIT 2 : je crois avoir trouvé la réponse ici : https://sites.google...awing-algorithm


EDIT 3 : bon ça marche, y a mieux comme infos ici : http://enchantia.com...h/ellipses.html

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP