2016-09-30 8 views
2

현재 4 차 베 지어 곡선을 추가하여 베 지어 곡선을 생성했습니다. GL_LINES을 사용하고 있습니다. 각 베 지어 점에서 접선, 일반 및 비 전형적인 법선을 그릴 필요가 있습니다.베 지어 곡선의 각 점에 접선을 그리고 그립니다. opengl

는 지금까지 내가 아는 한, t의 주어진 값에 접선을 찾기 위해, 방정식 내가 현재 다음과 같은 방법으로 위의 식을 사용하고

P'(t) = 4 * (1-t)^3 *(P1 - P0) + 12 *(1-t)^2*t*(P2-P1) + 12 * (1-t) * t^2 * (P3-P2) + 4 * t^3 * (P4-P3) 

입니다. j는 X, Y, Z 값에 대응 tangentPoints

temp = 1-t; 
tangentPoints[val].XYZW[j] = (4 * pow(temp, 3)*(V[k + 1].XYZW[j] - V[k].XYZW[j])) + (12 * pow(temp, 2)*t*(V[k + 2].XYZW[j] - V[k + 1].XYZW[j])) + (12 * (temp)*pow(t, 2)*(V[k + 3].XYZW[j] - V[k + 2].XYZW[j])) + (4 * pow(t, 3)*(V[k + 4].XYZW[j] - V[k + 3].XYZW[j])); 

는 정점 날에 의해 형성되는 구조이다. V는 제어점의 정점 배열입니다.

값 t와 해당 탄젠트 값 (dx)의 베 지어 곡선 (x)의 점 사이에 선을 그립니다. 그러나 (x, dx) 사이의 접선을 그리는 동안 무언가를 얻습니다. 이렇게 ((x, dx)에서 선 그리기). Tangent generated by drawing a line between (x,dx)

하지만 대응 탄젠트 포인트들 각각에 베지 포인트를 더하고 때, 즉, I는 (X, X + DX) 사이의 선을 그려 올바른 결과를 얻고, 오른쪽 이미지를 얻고

이 때문에 또한 주어진 베 지어 점의 접선 정상 그리기 통찰력을 제공하는 이유

Drawing a line between (x,x+dx)

사람은 말해 줄 수.

답변

4

비록 종종 P'(t)은 탄젠트라고도하지만 실제로는 곡선의 파생물, 즉 속도입니다. 곡선이 2 차원 공간에 있고 그 점이 미터 단위로 측정된다면, P'(t)의 단위는 미터/초인이 될 것입니다. 다른 점의 점이기 때문에 '5 미터'와 '6 미터/초'사이에 선을 그리는 것은 의미가 없습니다.

'커브상의 포인트'와 '커브에서 벗어나서 현재 속도로 1 초 동안 계속 이동하면 오브젝트가있는 위치'사이에 선을 그어야합니다. 이는 P(t)P(t) + dt * P'(t) 사이입니다.

+0

그래도 일반 그리기도 마찬가지입니다. P (t)와 P (t) + normal (t) 사이에 선을 그리는 것을 의미합니다. – sss999

+0

@ sss999 : 본질적으로 그렇습니다. 탄젠트/노말/어떤 것을 속도/곡률/기타에 비례하지 않고 항상 벡터를 정규화하여 고정 된 크기로 그리도록 선택할 수 있습니다. 예 : 접선에 대해 'P (t) + P'(t)/| P '(t) |'. 'normal'은 아마 이미 정규화되어있을 것입니다. – ybungalobill

+0

3D의 경우 먼저 커브의 점에 대한 이동 평면을 찾아야하지만 * super * 복잡하지 않으며 http://stackoverflow.com/a/에서 다루기 때문에 좀 더 많은 작업이 있음에 유의하십시오. 25458216/740553 –

관련 문제