CODEONWORT

비트맵데이터에 원 그리기 (Midpoint Circle Drawing 알고리즘) 본문

Season 1/플래시

비트맵데이터에 원 그리기 (Midpoint Circle Drawing 알고리즘)

codeonwort 2012.07.03 19:27
원 xx + yy = rr에 대해 함수 f(x, y) = xx + yy - rr으로 점 (x, y)가 원의 경계, 원 밖, 원 내부 중 어디에 있는지를 알아낼 수 있음에 착안하는 알고리즘. Hearn Baker의 책 Computer Graphics with OpenGL에서 읽고 as3로 구현했다.

단색으로 칠하도록 구현했으니 목적에 맞게 변형하자.

function circle(bd:BitmapData, cx:int, cy:int, R:Number, color:uint=0x0):void {
var p:Number = 1.25 - R
var x:int = 0, y:int = R
bd.setPixel(cx, cy+R, color)
bd.setPixel(cx, cy-R, color)
bd.setPixel(cx+R, cy, color)
bd.setPixel(cx-R, cy, color)
while(x < y){
x++;
if(p < 0){
p += x+x + 1;
}else{
y--;
p += x+x + 1 - y-y;
}
bd.setPixel(cx+x, cy+y, color)
bd.setPixel(cx-x, cy+y, color)
bd.setPixel(cx+x, cy-y, color)
bd.setPixel(cx-x, cy-y, color)
bd.setPixel(cx+y, cy+x, color)
bd.setPixel(cx-y, cy+x, color)
bd.setPixel(cx+y, cy-x, color)
bd.setPixel(cx-y, cy-x, color)
}
}

5 Comments
댓글쓰기 폼