2014-06-23 2 views
0

OpenGL에서 지정된 점 3 개를 통해 호를 렌더링하려고합니다. 지금까지 나는 (3 점을 통과하는 원의 중심과 반지름, 그리고 시작과 끝 각도) 이렇게하기 위해 필요한 다른 값들을 모두 계산할 수있었습니다. 내 문제는 중간 점의 위치에 따라 시계 방향 또는 반 시계 방향으로 호를 그리는 방향을 결정할 때 발생합니다. 다음과 같이 내 코드는 다음과 같습니다 (해키 실험 코드는 [0] 시작되는 점, 점 [1] 중간이고, 점 [2] 끝) 현재 단지 렌더링되는 당신이 아크를 볼 수있는중심점을 통한 원호

void render() 
{ 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

glColor3f(0.0f, 0.0f, 0.0f); 

// Circle Parameters 
Point2D center = circleCenter(points[0], points[1], points[2]); 
double circleRadius = radius(points[0], points[1], points[2]); 

// Arc Parameters 
double start = atan2(points[0].y - center.y, points[0].x - center.x) * (180/M_PI); 
double middle = atan2(points[1].y - center.y, points[1].x - center.x) * (180/M_PI); 
double end = atan2(points[2].y - center.y, points[2].x - center.x) * (180/M_PI); 

if (start < 0) 
    start += 360; 
if (middle < 0) 
    middle += 360; 
if (end < 0) 
    end += 360; 

// Render circle 
glBegin(GL_LINE_STRIP); 
for (int i = start; i < end; i++) 
{ 
    double degInRad = i * M_PI/180; 
    glVertex2d(cos(degInRad)*circleRadius + center.x, sin(degInRad)*circleRadius + center.y); 
} 
glEnd(); 

glutSwapBuffers(); 
} 

시작과 끝 지점 사이. 그것이 중심점을 통해 올바른 방향으로 렌더링되도록하려면 어떻게해야합니까?

업데이트 1 : 예를 들어 아래 그림에서 파란색 점은 정의 된 세 점이고 빨간색은 원 중심입니다. 상단 이미지에서 원호가 중간 점을 통과합니다. 그러나 아래쪽 이미지에서 내 중간 점이 오른쪽에 있더라도 호는 여전히 시계 방향으로 그려져 있습니다. 서로 다른 시작/끝점 조합에 대해서도 마찬가지입니다. 원호가 항상 중심점을 지나는 균일 한 방법이 있습니까?

오른쪽 :

Right

잘못된 : 중간 거짓말

Wrong

+0

달성하려는 이미지를 추가 할 수 있습니까? – mrVoid

+0

이미지를 추가 할 담당자가 부족하지만 일부를 연결했습니다. – user3750097

+0

이것은 대부분 http://stackoverflow.com/questions/24178416/arc-via-3-points-in-specific-direction의 복제본처럼 보입니다. 다른 질문에는 허용/상향 답변이 없기 때문에 중복으로 표시 할 수는 없지만 그 내용은 여전히 ​​도움이됩니다. –

답변

0

당신은 확인할 수 있습니다.

(...) 

if (end < start) 
    end += 360; 
if (middle < start) 
    middle += 360; 

if (middle < end) 
    doNormal = true; 
else 
    doNormal = false; 

// Render circle 
glBegin(GL_LINE_STRIP); 
for (int i = doNormal ? start : end; i < doNormal ? end : start; i += doNormal ? 1 : -1) 
    (...) 
관련 문제