P=t * P_1+(1-t)P_2
// t는 0 부터 1까지의 모든 실수
//모든 t에 대한 자취가 바로 베지어곡선
ex) p_1 가 (0,100) p_2가 (100, 0)인 경우의 자취점을 대강 찾아보면
1) t가 0 : P = 0 >> (100,0)
2) t가 0.1 : P = 0.1 (0,100) + 0.9 (100, 0) >> (90, 10)
3) t가 0.2 : P = 0.2 (0,100) + 0.8 (100, 0) >> (80, 20)
4) ...
n) t가 1 : P = 1 (0,100) + 0 (100, 0) >> (100, 100)
P(t) = (1-t){(1-t)A + tB} + t{(1-t)B+tC}
ex) A(0, 100), B(50, 0), C(100, 50) 인경우의 곡선을 그려보면
1) t가 0
P(0) = A (0, 100)
2) t가 0.1
P(0.1) = 0.9(0.9A + 0.1 B) + 0.1(0.9B + 0.1C)
= 0.81A + 0.09B + 0.09B + 0.01C
= (0, 81) + (9,0) + (1, 0.5)
= (10, 81.5)
3) t가 0.2
P(0.2) = 0.8(0.8A + 0.2 B) + 0.2(0.8B + 0.2C)
= 0.64A + 0.16B + 0.16B + 0.04C
= (0, 64) + (16,0) + (4, 2)
= (20, 66)
5) t가 0.3
P(0.3) = 0.7(0.7A + 0.3 B) + 0.3(0.7B + 0.3C)
= 0.49A + 0.21B + 0.21B + 0.09C
= (0, 49) + (21,0) + (9, 4.5)
= (30, 53.5)
…
P(1) = C
= (100, 50)
ABC지점만 보고 어떤 수치로 그려질지 바로 떠오르진 않겠지만 t가 증가할수록 점p 가 b,c와 가까워진다는거랑 b쪽으로 곡선이 치우쳐져 그려질것이라는 정도는 추측이 가능할거같다.
3차 베지어 곡선은 4개의 기준점을 통해 그리기를 완성한다.
예시로가져온 아래 그림을 보면
P0P1직선 P1P2직선 P2P3직선을 지나는 M0, M1, M2(세점은 같은 속도로 이동한다.)의 내분점 B0, B1(두점도 같은속도로 이동)로 그어진 직선의 내분점 B를 이용해 그려진 곡선을 확인할 수 있다.
참고 : https://blog.coderifleman.com/2016/12/30/bezier-curves/index.html
func move(to point: CGPoint)
func addLine(to point: CGPoint)
func addQuadCurve(to endPoint: CGPoint,
controlPoint: CGPoint)
func addCurve(to endPoint: CGPoint,
controlPoint1: CGPoint,
controlPoint2: CGPoint)