2013-03-18 74 views
5

是否有一箇中點繪製橢圓算法類似中點畫圓算法?是否有中點橢圓算法?

我已經搜索在谷歌的例子,但任何我發現要麼不工作或爲填充的橢圓,未標出。此外,中點圓算法上的維基百科頁面指的是橢圓版本的存在,但有一個谷歌似乎無法幫助解決的死鏈接。

任何幫助將不勝感激。

回答

5

最終在這裏找到答案:

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

轉載和調整更加普遍低於適用...

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); 
    } 
}