2013-03-18 1 views
5

Esiste un algoritmo di tracciatura dell'ellisse del punto medio simile all'algoritmo del cerchio del punto medio?Esiste un algoritmo di ellisse al punto medio?

Ho cercato su google per esempi, ma ho trovato che non funzionano o sono per ellissi piene, non tracciate. Inoltre, la pagina di wikipedia sull'algoritmo del cerchio del punto medio si riferisce all'esistenza di una versione di ellisse ma ha un collegamento morto che google sembra non riuscire a risolvere.

Qualsiasi aiuto sarebbe gradito.

risposta

5

alla fine ha trovato una risposta qui:

http://geofhagopian.net/sablog/Slog-october/slog-10-25-05.htm

Riprodotto e ottimizzato per essere più generalmente applicabile sotto ...

function ellipsePlotPoints (xc,yc, x, y) 
{ 
    setPixel (xc + x, yc + y); 
    setPixel (xc - x, yc + y); 
    setPixel (xc + x, yc - y); 
    setPixel (xc - x, yc - y); 
} 

function ellipse(xc,yc, a, b) 
{ 
    var a2 = a * a; 
    var b2 = b * b; 
    var twoa2 = 2 * a2; 
    var twob2 = 2 * b2; 
    var p; 
    var x = 0; 
    var y = b; 
    var px = 0; 
    var py = twoa2 * y; 

    /* Plot the initial point in each quadrant. */ 
    ellipsePlotPoints (xc,yc, x, y); 

    /* Region 1 */ 
    p = Math.round (b2 - (a2 * b) + (0.25 * a2)); 
    while (px < py) { 
     x++; 
     px += twob2; 
     if (p < 0) 
     p += b2 + px; 
     else { 
     y--; 
     py -= twoa2; 
     p += b2 + px - py; 
     } 
     ellipsePlotPoints (xc,yc, x, y); 
    } 

    /* Region 2 */ 
    p = Math.round (b2 * (x+0.5) * (x+0.5) + a2 * (y-1) * (y-1) - a2 * b2); 
    while (y > 0) { 
     y--; 
     py -= twoa2; 
     if (p > 0) 
     p += a2 - py; 
     else { 
     x++; 
     px += twob2; 
     p += a2 - py + px; 
     } 
     ellipsePlotPoints (xc,yc, x, y); 
    } 
}