2012-05-08 3 views
2

문제를 시작하기 전에 4 개의 입방체 베 지어 포인트에 대해 P0, P1, P2 및 P3을 사용하고 파라 메트릭이므로 't'를 사용합니다. 또한 Google과 마찬가지로이 사이트에서 비슷한 문제를 찾았으므로 찾을 수 없습니다. 이것이 일반적인 질문 인 경우 사과드립니다.큐빅 베 지어 곡선에서 P0 == P1 일 때 t = 0에서 비제로 dx/dt 및 dy/dt를 계산하는 방법?

문제 : 나는이 이가지 경우

1: t = 0 and P0 == P1 
2: t = 1 and P2 == P3 

에 입방 베지 모두 DX/DT 및 DY의/DT 0의 기울기를 얻고 여기 설명하기 위해 예입니다 (1) 여기서 t = 0 및 P0 == P1이다.

= 0 t에서 다음과 같은 삼차 베 지어의 (즉, DX/DT 및 DY의/DT) 탄젠트를 찾기 :

(100, 100) (100, 100) (150, 150) (200, 100) 

가 탄젠트를 찾으려면 우리는 삼차 베 지어의 1 차 미분을 싶어 :

Cubic Bezier definition 
B(t) = (1-t)^3P0 + 3t(1-t)^2P1 + 3t^2(1-t)P2 + t^3P3  
First derivative of a bezier curve (if you'd like to see the steps I used to get here, let me know) 
B'(t) = (-3P0 + 9P1 - 9P2 + 3P3)t^2 + (6P0 - 12P1 + 6P2)t + (-3P0 + 3P1) 

는 1 차 미분 방정식으로 t = 0에서 플러깅 우리

B'(0) = -3P0 + 3P1 

을 얻고 최종적으로 회수 t 모자 P0 = P1 = (100, 100)이므로 DX/DT 및 DY의 /에 DT이다 :이 나에게 이야기

dx/dt = dy/dt = -3*(100) + 3*(100) = 0 

...이 큐빅 베 지어 t = 0에서의 접선이 없다. 당신이 그것을 그래프로보고 보았다면 말이되지 않습니다.

0이 아닌 기울기를 얻으려면 무엇을해야합니까? 포인트 P1, P2 및 P3을 2 차 베 지어처럼 처리하고 등가 3 차 베 지어로 변환 한 다음 t = 0 그 일을 피할 수있는 방법이 있습니까? dx/dt와 dy/dt가 0 인 탄젠트를 받아들이 기 어렵습니다. 도움 주셔서 감사합니다.

답변

2

B'(t) (t = 0)은 케이스 1 (케이스 2의 경우 t = 1)에서 실제로 정의되지 않습니다.

왜 그런지 보려면 Casteljau 알고리즘을 "거꾸로"실행하여 곡선의 매개 변수 범위를 t = 0 ... 1에서 t = -1 ... 1까지 두 배로 늘릴 수 있습니다. 이것은 다음과 같은 삼차 베 지어 곡선의 제어점 결과 :이 곡선을 그릴 경우, t = 0.5 ... 1에서 원래 곡선을 볼 수

(300,400) (0,-100) (100,200) (200,100) 

. 또한이 커브의 연장 선인 t = 0.5에 원본의 시작 부분에 첨단이 있음을 알 수 있습니다. 이 커 스프는 커브가 시작 지점에서 차별화되지 않는 이유입니다.

그러나 곡선의 접선이 아니라과 매우 유사합니다. 그래서 당신이 필요로하는 것이면 탄젠트가 있다면 운이 좋을 것입니다. (미분은 곡선에 접하지만 곡선의 법선에 수직 인 다른 벡터도 마찬가지입니다.)

이 곡선의 단부에서의 접선에 대체로 상응하는 것으로 밝혀졌다 :

P1 - P0 at t = 0 
P3 - P2 at t = 1 

그러나 만약 축퇴 시점 (단 P0 = P1 및/또는 P2 = P3)이면 접선 (즉, t = 0의 경우 P0 = P1 및/또는 t = 1P2 = P3 인 경우)과 동등하다 :

P2 - P1 

당신은 이러한 경우,578,611을 평가임을 확인할 수은 t->0입니다. 당신이 t = 0.5 두의 확장 곡선을 분할하고 각 측면에 P2 - P1 방정식을 적용하는 경우

사실, 당신은 끝에서 두 다른 접선이 있다는 것을 확인할 수 있습니다. 커브 점의 각 절반에 대한 접선은 정 반대 방향입니다. 이것은 파생 상품이이 시점에서 정의되지 않은 이유에 대한 또 다른 예입니다.

하나의 마지막 메모 : 포인트 P1, P2 및 P3을 2 차 베 지어처럼 처리하는 트릭은 올바른 접선을 제공합니다. 그러나 이것은 이 아니며은 정확한 파생물을 제공합니다.

+1

와우, 멋진 대답. 이 질문을 게시 한 후에 나는 그것에 대해 조금 더 생각하고 대답의 일부를 깨달았습니다. 마찬가지로 점 P2와 P1 사이의 기울기를 얻을 수 있고, 또한 P0 == P1 일 때 미분이 정의되지 않았 음을 의미합니다 (P0과 P1 사이의 기울기는 미정입니다). "왜?"를 명확히 해 주셔서 감사합니다! – Ootawata

1

은이 질문은 이미 정답을하지만 난 당신이 기본 수학을 알고 싶습니다 생각된다 : 당신은 입방 베 지어의 최종 슬로프를 찾을 찾고

. 곡선 (즉, x 및 y 값)은 t에서 매개 변수이므로 x와 y를 구별합니다. t 별도로. 당신이 도달 한 쌍은 곡선을 따라 이동하는 점의 즉각적인 "속도"로 생각할 수 있습니다. 따라서이 경우 점의 초기 속도는 0 (또는 더 정확하게는 null-vector)이지만 (대부분은) 가속도 (또는 가속도 변화가 적어도 실패한 경우)가 0이 아니므로 점의 속도는 0이 아니며 (비공 수 벡터가 아님) 따라서 해당 좌표에서 이동하여 곡선을 따라 흘러갑니다.

그러나 시각적으로 인식하는 기울기는 매개 변수가 아니며 시간에 따라 다릅니다. I.O.W. dx/dx, dy/dt가 아니라 dy/dx이고 dx/dt와 dy/dt가 둘 다 커브의 t = 0 일 때 0이라면 dy/dx = (dy/dt)/(dx/dt) = 0/0 이는 불확정하다. 이것을 평가하려면 L' Hopital의 규칙을 적용해야합니다. Wikipedia article에서 규칙의 자세한 처리 방법을 얻을 수 있지만 기본적으로 이러한 불확정 한 제한을 평가하려면 분자 f와 분모 g를 구별하여 f '와 g'를 구한 다음 제한 (f/g)이 동일하다는 것을 의미합니다 제한 (f '/ g'). 이제 p0, p1, p2 및 p3이 큐빅을 정의하는 점인 경우

dy/dt = ypart (3 * (p1 - p0) + 6 * t * (p2 - 2 * p1 + p0) + 3 * t ** 2 * (p3 - 3 * p2 + 3 * p1 - p0))

dx/dt = xpart (3 * (p1 - p0) + 6 * t * (p2 - 2 * p1 + (d3/3 * p2 + 3 * p1 - p0)) * 3 * t ** 2 * (p1 - p0)

그러나 이것은 p0 == p1 일 때 불확실해진다.L' Hopital의 법칙에 의해,

한계 (t-> 0) [(dy/dt)/(dx/dt)] = 한계 (t-> 0) [(d2y/dt2)/(d2y/dt2)/지금)]

:

D2Y/DT2 = ypart (6 * (P2 - 2 * (P1)의 +의 P0) + 6 * T는 * (P3 - 3 * P2 + 3 * - P1 P0))

D2X/DT2 = xpart (6 * (P2 - 2 * (P1)의 +의 P0) + 6 * T는 * (P3 - 3 * P2 + 3 *의 P1 - P0))

및 t에서 = 0 (D2Y/dt2)/(d2x/dt2) = ypart (p2-2 * p1 + p0)/xpart (p2-2 * p1 + p0)

하지만 p1 == p0이므로 yaff (p2 - p0)/xpart (p2 - p0)가됩니다. Naaff가 말한 것과 정확히 일치합니다. p2 == p0이라면 ​​(심지어는 커브가 퇴색하고, 특히 입방체 인 경우, 직선 일뿐입니다!), 심지어 이것도 불확실합니다. 그리고 분자와 분모를 한번 더 구별 할 수 있습니다 도착 :

한계 (DY/DX) = 한계 (T -> 0) (d3y/DT3)/(D3X/DT3) = ypart (P3 - P0)/xpart (P3 - P0)을

나는 그것이 당신에게 유용했기를 바란다 ... (BTW는 마치 TeX와 같은 표기법이 math.stackexchange와 다르게 작동하는 것처럼 보이지 않는다. 그렇지 않으면 수학 표식을 제공한다.)