2012-12-17 2 views
4

내 C 코드로 사양에 따라 비트 맵/bmp 파일을 만들고 있는데 비트 맵에 간단한 프리미티브를 그려야합니다. 다음 코드는 내 비트 맵에 사각형을 그리는 방법을 보여줍니다채워진 원을 그리는 방법?

if(curline->type == 1) // draw a rectangle 
{ 
    int xstart = curline->x; 
    int ystart = curline->y; 
    int width = curline->width + xstart; 
    int height = curline->height + ystart; 

    int x = 0; 
    int y = 0; 

    for(y = ystart; y < height; y++) 
    { 
     for(x = xstart; x < width; x++) 
     { 
     arr[x][y].blue = curline->blue; 
     arr[x][y].green = curline->green; 
     arr[x][y].red = curline->red; 
     } 
    } 

    printf("rect drawn.\n"); 
} 

... 
save_bitmap(); 

예 출력 : 그래서 enter image description here

기본적으로 내가 주어진 내의 모든 픽셀의 적색, 녹색, 청색의 값을 설정하고 있습니다 x와 y 필드.

이제 중점과 반지름을 알면 서클을 채우고 싶습니다. 그러나이 원 안에 어떤 픽셀이 있고 어떤 픽셀이 아닌지 어떻게 알 수 있습니까? 어떤 도움을 주시면 감사하겠습니다. 독서에 감사드립니다.

+2

bool b = x * x + y * y tp1

답변

9

점에서 원의 중심까지의 거리가 원의 반지름보다 작은 경우 점이 원의 경계 내에 있습니다.

int dx = x2 - x1; // horizontal offset 
int dy = y2 - y1; // vertical offset 
if ((dx*dx + dy*dy) <= (r*r)) 
{ 
    // set pixel color 
} 
+0

감사합니다. 이것은 완벽하게 작동했습니다. 채울 픽셀을 실제로 계산하는 것이 실제로 쉽지는 않을 것이라고 상상도하지 못했습니다! – beta

+2

연습으로 가장자리의 앤티 앨리어싱을 시도해 볼 수 있습니다. 즉, 픽셀의 너비를 고려해야하고, 픽셀이 원에 정확히 가깝지만 정확하게 있지 않을 때 경계를 음영 처리하는 것을 의미합니다. – paddy

3

당신은 또한 위키 피 디아에 here을 중간 점 알고리즘을 시도 할 수 있습니다 :

는 점 센터 (X2, Y2) 및 반경 r 인 원에 비해 (X1, Y1)를 고려한다.

+0

유용한 링크, +1을 가져 주셔서 감사합니다! – beta

관련 문제