2010-07-05 1 views
0

나는 언어 독립적 인 문제라고 생각하지만 flex로 작업하고 있습니다. curveTo (quadratic bezier 함수를 사용하여 3 점을 사용하여 곡선을 그리려는 중입니다. 그렇다면 Flex에서 다른 점이 있다고 생각하지 않습니다. 포인트 1과 3은 점이있는 노드입니다. 2는 드래그 핸들입니다.베지에 곡선의 꼭지점 찾기

내가 원하는 것은 에 대해 포인트 2를 향해 곡선을 그리는 것이 아니지만 실제로 통과시킵니다. 나는 이것을 작동 시켜서 작동 시키려고 노력했다. (점 1과 점 3 사이의 선의 중간 점 사이의 거리)와 점 2를 합친 것이다.

이것은 선의 꼭대기에 두지 않는다. , 어딘가에 그것의 가까이에.

누구나 아이디어가 있으십니까?

앤드류

+1

베 지어 스플라인은 정의 상 제어 포인트를 통과하지 않습니다 (축퇴의 경우는 제외). 설계 상 제어점 (Catmull-Rom)을 포함하는 입체 스플라인이 있지만 Flex에 대해서는 아무 것도 모르기 때문에 어떤 방식 으로든 지원되는지 여부는 말할 수 없습니다. 그들은 구현하기가 전혀 어렵지 않습니다. 나는 정말 바보 같아서 과거에 여러 번 코드를 작성했습니다. – Pointy

+0

커브가 선택한 점을 통과하도록 드래그 핸들의 위치를 ​​실제로 선택하려는 것 같습니다. 예? 점은 임의적이거나 제한적입니다. 즉 point2는 실제로 1에서 3까지의 선분 이등분선에 있습니까? – phkahler

답변

0

사절 베 지어 곡선의 식을 이용하여 계산할 수있다 P0, P1 및 P2가 지정한 3 포인트는

B(t) = (1-t)(1-t)*P0 + 2(1-t)t*P1 + t*t*P2 

. 곡선은 P0에서 시작하여 P2로 끝납니다. t 범위는 0에서 1 꼭지점은 t = 0.5 에 도달해야합니다. 따라서 P0, P2 및 t = 0.5를 수식에 삽입하여 꼭지점을두고 수식에서 P1을 추출하고 싶습니다.

+0

감사합니다. 이미 공식을 살펴 봤습니다. 문제는 꼭지점이 항상 t = 0.5가 아니라는 문제에 있습니다. – Andrew

0

베 지어 스플라인은 제어점을 통과하지 않지만 Catmull Rom 스플라인은 통과합니다.

B(t) = ((2*P1)+(-P0+P2)*t + (2*P0-5*P1+4*P2-P3)*t*t + (-P0+3*P1-3*P2+P3)*t*t*t))/2

이 차 스플라인보다는 입방이지만. 당신은 P1=P2

0

우리에게이 공식을 시도 할 수 : B'(t) = 3 (1 - t) 2 (P1 - P0) + 6 (1 - t) t (P2 - P1) + 3 t2 (P3 - P2)

당신은 최대 값과 최소값을 찾기 위해 유도체를 사용할 수 있습니다.