2017-04-09 10 views
0

커브를 따라 원호 길이의 매개 변수화 된 (즉, 등 간격으로) 점을 원합니다. 나는 그것을 Casteljau와 pythagoras를 사용하여 반복 할 수 있습니다. 이것은 커브가 정적 일 때 작동하지만 커브가 동적이면 잘립니다. 또한 나는 3 차 다항식을 시도했는데 예상대로 Casteljau와 같은 점수를 주었다.무차별 대입/룩업 테이블없이 베 지어의 알파 포인트 찾기

루프/배열없이 alp-points를 효율적으로 사용하기 위해 이러한 함수를 변경하는 방법이 있습니까? 근사값은 괜찮습니다. 당신이 아크 길이 없습니다 일반적으로

float lerp(float A, float B, float C) { 
    return A*(1-C)+B*C; 
} 

float bezierPoint_lerp(float A, float B, float C, float D, float T) { 
    return lerp(lerp(lerp(A, B, T), lerp(B, C, T), T), 
       lerp(lerp(B, C, T), lerp(C, D, T), T), T); 
} 

float bezierPoint_pow(float A, float B, float C, float D, float T) { 
    return A * pow(1-T,3) + 
     B * 3 * pow(1-T,2) * T + 
     C * 3 * (1-T) * pow(T,2) + 
     D * pow(T,3); 
} 
+0

'alp points'란 무엇입니까? – MBo

+0

호 길이 매개 변수화/등거리 점 – PrincePolka

답변

0

은 곡선을 상징적으로, 그래서 당신의 가장 좋은 방법은 말 그대로 당신이 당신의 곡선 그리기하는 동안 당신의 등거리가 포인트 표시하는 것입니다 reparameterize. 그리기 전에 커브 길이를 계산 한 다음 커브의 픽셀을 화면에 그릴 때 대략적인 거리 집계를 수행하고 "대략 이전에 필요로하는 거리"인 좌표를 누르면이를 자체 목록. 커브를 그려 넣는 동안 그 일을 계속하면 마지막에는 "alp"지점과 관련된 좌표 만의 짧은 목록이 완성됩니다.