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. 예쁜 곡선.
두 점만 선을 정의합니다. 부드러운 커브를 원한다면 커브를 정의하는 데 2 점 이상이 필요합니다. – duskwuff
@duskwuff 알 겠어.하지만 내가 이해하려고하는 것은 정확히 네가하는 말이다.나는이 두 점 사이에서 제어점을 찾고 곡선을 가질 수 있기를 원합니다. –
컨트롤 포인트를 선택해야합니다! 0과 5 사이의 두 줄을 고려하십시오 - 프로그램에서 두 가지 중에서 어느 것을 그릴 것인지 결정하는 방법은 무엇입니까? – duskwuff