De Casteljau의 알고리즘을 사용하는 것이 베 지어 곡선을 그릴 수있는 최선의 방법이 아니라는 것을 알고 있지만 할당을 위해 구현해야합니다. 다음 방정식 (Drexel의)을 기반으로 알고리즘을 정의하고 있습니다.반복을 위해 중첩 된 for 루프를 사용하는 경우 De Casteljau 알고리즘의 특정 제어점을 어떻게 지정합니까?
컨트롤 포인트를 정의
.
알고리즘을 수행하는 함수를 정의하려고하지만 컨트롤 포인트를 통합 할 위치/방법을 고민하고 있습니다. 제어점은 사용자가 정의합니다. 프로그램과 상호 작용할 때 왼쪽 클릭으로 새로운 제어점이 추가됩니다. 다음과 같이 내 기능은 현재 같습니다
이2Dpoint
는 헤더 파일에 의해 정의 된 단지 구조
2Dpoint deCast(float t)
{
2Dpoint tempDC // Temporary value of point passed back to OpenGL draw function
tempDC.x = 0; tempDC.y = 0 // Initialize temporary value
int r,i;
int n = C->B.size(); // C is pointer to B vector, which is where the control points are stored in a 2D vector
for (r = 1; r<n, r++)
{
for (i = 0; i<n-r; i++)
{
// Calculation of deCast points goes here
}
}
}
이 C
이 2Dpoint
구조체 B
전화에 저장되어있는 제어점의 위치에 대한 포인터 (즉, i
제어점 벡터의 값은 C -> B[i].x
및 C -> B[i].y
에 의해 액세스됩니다. 아래 그림과 같이 t
이 내 draw
함수에서 구현 될 때 함수에 제공됩니다. 그 모든 이유 드 당신도 당신의 수학 공식에 표시 Casteljau 알고리즘 작업 (때문에
void draw()
{
glColor3f(0.0f, 1.0f, 0.0f);
glLineWidth(2.0f);
glBegin(GL_LINE_STRIP);
float DCiter = 0;
while (DCiter <= 1.0)
{
2Dpoint DC = decast(DCiter);
glVertex2f(DC.x, DC.y);
DCiter = DCiter + 0.01;
}
}
[this] (http://stackoverflow.com/q/42421988/560648) 당신의 동급생입니까? ;) –
링크를 이용해 주셔서 감사합니다. – cl40
1.'while' 루프 다음에'glEnd()'가 없습니다. 2. 왜 네 중첩 된'for's가 있습니까? 3. 제어점의 사본을 저장하려면 temp가 필요합니다 (변경 될 때). 그렇지 않으면 커브의 첫 번째 점을 계산 한 후 원래의 제어점이 손상됩니다. 그래서'B'의 로컬 복사본을 추가하고'for' 루프를 반복 할 때마다 결과가 하나만 남을 때까지 포인트 카운트를 하나씩 줄이십시오 ('tempDC'가 필요 없습니다) – Spektre