2016-10-31 7 views
2

저는 C++에서 타원을 그리는 함수가 있습니다. 이제 해당 타원에 채우기 옵션을 추가하고 싶습니다. 어떻게해야합니까? 홍수 채우기 알고리즘을 사용해 보았지만 표면에 이미 그림이 포함되어 있으면 올바르게 작동하지 않습니다.타원 모양을 채우는 방법?

여기 내 현재의 알고리즘 :

const double TwoPI = (PI * 2); 
const double Step = (PI/180.0f); 

for(double i = 0; i < TwoPI; i += Step) 
{ 
    float x_offset = (radiusX * cos((float) i)); 
    float y_offset = (radiusY * sin((float) i)); 

    int x = int(a_X + x_offset); 
    int y = int(a_Y + y_offset); 

    if(prevX == -1 && prevY == -1) 
     Plot(x, y, color); 
    else 
     Line(prevX, prevY, x, y, color); 
} 
+2

어떤 라이브러리를 사용하고 있습니까? 'C++ '에는 표준에 정의 된 그래픽 라이브러리가 없습니다. OpenGL 등을 말하는 겁니까? – CoryKramer

+0

그릴 때 왜 채우지 않습니까? – stark

+1

@CoryKramer : 알고리즘 질문의 경우에는 그다지 관련성이 없습니다. 분명히, 실제 그래픽 라이브러리를 사용하면 대답은 "제공된'DrawEllipse' 함수를 사용하는 것"이지만, 그것은 채워지지 않은 타원에 대한 대답이었을 것입니다. – MSalters

답변

3

음, 하나 개의 아이디어는 절반 만 원을 통과, 대신 대칭, 즉 y 축 주위에 배치되는 점을 계산 될 수있다. 그런 다음 수평선을 그어서 모든 픽셀을 채 웁니다.

+0

그래서'Line()'함수를 직접 사용하지 않고 모든 것을 계산하는 데 사용합니다. 하나의 축에있는 두 점 사이의 픽셀? – Z0q

+0

@Zoq : 아니요. 생각해 보면 선을 사용하지만 (-X, Y)에서 (X, Y)까지 선을 그립니다. 그런 다음 모든 줄에 다른 색상을 사용하면 가로 줄무늬 패턴이 나타납니다. (그러나 귀하의 _fixed angular_ step 크기로,이 라인들 중 많은 부분이 겹칠 것입니다. _fixed vertical_ step을 취하는 것이 더 낫습니다.) – MSalters

+0

나는 이해합니다. 타원이 작 으면 겹치지 만, 타원이 큰 경우 멀리 떨어져 있습니다. – Z0q

0

당신은 양쪽 방향으로 여행과 같은 뭔가 끝에서 끝까지 선을 드로우 : 나는 it.It이 채워진 원을 그릴 예정 단지 idea.Its있어 실행하려고하지 않았다 합니다.

const double TwoPI = (PI * 2); 
const double Step = (PI/180.0f); 
double start=0; 
for(double i = 0; i < TwoPI; i += Step) 
{ 
    float x_offset = (radiusX * cos((float)start+ i)); 
    float y_offset = (radiusY * sin((float) start+i)); 

    float x2_offset = (radiusX * cos((float)start - i)); 


    int x = int(a_X + x_offset); 
    int x2 = int(a_X + x_offset); 
    int y = int(a_Y + y_offset); 


    Line(x, y, x2, y, color); 
} 
관련 문제