2014-09-14 21 views
0

두 점 사이의 곡선을 그리는 방법을 찾고 있었을 때부터 기억이 안납니다.두 점 사이에 곡선 그리기

나는 QuadCurves2D, 베 지어 커브 (Bezier Curve) 등과 같은 많은 것들을 시도했지만 컨트롤 포인트를 찾지 못했습니다. 그들이 또는이 무엇이며

(ALT를 눌러 화면상에서 드래그하여 지점 "의 위치를 ​​변경할 수있는 사용자) 그들 사이에있는 각도 위치를

여기서의 아이디어는 독립적으로, 두 지점 사이의 곡선을 그릴 수있다 나는 지금까지 ... Wrong curve between two points

위에서 볼 수 있듯이 커브는 완전히 잘못되었습니다.

Correct curve

+0

두 점만 선을 정의합니다. 부드러운 커브를 원한다면 커브를 정의하는 데 2 ​​점 이상이 필요합니다. – duskwuff

+0

@duskwuff 알 겠어.하지만 내가 이해하려고하는 것은 정확히 네가하는 말이다.나는이 두 점 사이에서 제어점을 찾고 곡선을 가질 수 있기를 원합니다. –

+0

컨트롤 포인트를 선택해야합니다! 0과 5 사이의 두 줄을 고려하십시오 - 프로그램에서 두 가지 중에서 어느 것을 그릴 것인지 결정하는 방법은 무엇입니까? – duskwuff

답변

1

1 단계 : 나는 무엇을 기대

이 같은 것입니다 축 정렬 중 하나가 (0,0)에, 그리고 ([의 다른의 있도록 두 점을 .. .], 0). 그래서 그것은 거짓말 끝

P1 = {0,0} 
P2 = {c-a,d-b} 

은 우리가 (0,0)에 대한 (P2)를 회전 : P1의의 0,0에 있도록

P1 = {a,b) 
P2 = {c,d} 

우리가 그들을 번역의 우리가 두 점을 있다고 가정 해 봅시다 x 축 :

a = -atan2(dy,dx) = atan2(d-b, c-a) 
P2' = { p2.x * cos(a) - p2.y * sin(a), p2.x * sin(a) + p2.y * cos(a) } 

참고 - 우리가 "가리 키도록 축에서"각도를 알고 싶어하지 않기 때문에 atan2 전화 앞에 있지만, 지점에서 x 축에.

P1 = { 0 , 0 } 
P2' = { v , 0 } 

우리가 지금 할 수있는 우리가 곡선 구조의 측면에서 원하는대로 우리는 이제 두 개의 축 정렬 포인트 (새로운 P2 "V"의 x 좌표 회전하자 전화를) 가지고있다. 보통 꽤 추한 동안, 우리는 (v/2, ...)에있는 제어점을 가진 2 차 곡선을 만들 수 있고 높이는 "곡률이 얼마나 강해야하는지에 따라 원하는 것은 무엇이든간에. 이것은 변환 불변 좌표에 상대적인 좌표를 줄 것입니다 . P1 및 P2가 어디 있었는지 우리는 이미 알고 그래서 우리는이 모든 컴퓨팅 작업을 수행 할 필요가 없습니다 베 지어 곡선을 -

C = (v/2,h) -> rotate by -a -> translate by (a,b) 

(다시 서명 점에 유의) : 그래서 우리는 역 회전/변환을 적용합니다. "선체 점 (hull point)"에 의해 정의되고 선형 변환과 관련하여 잘 작동하므로 모든 변환/회전 비즈니스는 곡선을 그리는 알고리즘과 차이가 없습니다. 여섯 개의 값을 이차 곡선 함수에 연결하고 사전 계산하십시오. P1에 P2에 의해 통제되는 P2에서.

은 물론 당신은 아마 이차 곡선은 아주 못생긴 대신 때문에 차 곡선을 원하므로 대신 C를 정의하는, 우리는 C1과 C2 정의 할 수 있습니다 :/다음

C1 = (v/3, 0) 
C2 = (2*v/3, 0) 

과 인상을하여 둘을 낮출 같은 양; 그리고 우리는 그것들을 회전시키지 않고 반 평행 이동시키고 P1, C1, C2, P2를 이제 입방 베 지어 드로잉 기능으로 연결합니다 : done. 예쁜 곡선.

+0

아주 잘 구성된 답변을 해주셔서 감사합니다, 마이크. 나는 당신의 제안을 구현할 것입니다. 당신의 대답을 올바른 것으로 곧 다시 확인해 드리겠습니다. –