2013-03-18 3 views
5

中点サークルアルゴリズムに類似した中点楕円プロットアルゴリズムはありますか?中点楕円アルゴリズムはありますか?

Googleでは例を検索していますが、私が見つけたのはうまくいかないか、塗りつぶされていない楕円であることがわかりました。また、midpoint circleアルゴリズムのwikipediaページは、楕円形のバージョンの存在を参照していますが、Googleが解決できないように見える死んだリンクを持っています。

ご協力いただきありがとうございます。

答えて

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