有一条直线段 P 1 P 2 P_1P_2 P1P2,其端点坐标分别是 起 始 点 P 1 ( x 1 , y 1 ) 和 终 点 P 2 ( x 2 , y 2 ) 起始点P_1(x_1, y_1) 和 终点P_2(x_2, y_2) 起始点P1(x1,y1)和终点P2(x2,y2)。
那么这条直线段的参数表达式是:
P ( t ) = P 1 + ( P 2 − P 1 ) t = ( 1 − t ) P 1 + t P 2 ( 0 ⩽ t ⩽ 1 ) P(t)=P_1+(P_2-P_1)t=(1-t)P_1+tP_2 (0\leqslant t\leqslant1) P(t)=P1+(P2−P1)t=(1−t)P1+tP2(0⩽t⩽1)
这个式子怎么理解呢?
我们可以把 P 1 P 2 P_1P_2 P1P2 这条线段看作 100%,那么该线段上任意一点到起始点 P 1 P_1 P1 的距离所占 P 1 P 2 P_1P_2 P1P2 比例为 t, t 的大小在 [0, 1] 内。 P 2 − P 1 P_2-P_1 P2−P1 的含义就是沿着 P 1 P 2 P_1P_2 P1P2 直线段方向。
我对 t 一开始的推导如下:
不妨设 P 1 ( x 1 , y 1 ) , P 2 ( x 2 , y 2 ) P1(x_1, y_1),P2(x_2,y_2) P1(x1,y1),P2(x2,y2),P1 和 P2 所在直线斜率为 α \alpha α.
则该直线参数方程为(可以参考我的 这篇文章):
{ x = x 1 + t c o s α ( t 是 参 数 ) y = y 1 + t s i n α \begin{cases} x=x_1+tcos\alpha \\& (t 是参数) \\ y = y_1 + tsin\alpha \end{cases} ⎩⎪⎨⎪⎧x=x1+tcosαy=y1+tsinα(t是参数)
因此根据该参数方程我们可以继续推导直线段的参数方程为
( x , y ) = ( x 1 , y 1 ) + ( c o s α , s i n α ) t (x, y)=(x_1,y_1)+(cos\alpha,sin\alpha)t (x,y)=(x1,y1)+(cosα,sinα)t
而
c o s α = x 2 − x 1 P 1 P 2 s i n α = y 2 − y 1 P 1 P 2 cos\alpha=\dfrac{x_2-x_1}{P1P2} \newline \newline sin\alpha=\dfrac{y_2-y_1}{P1P2} cosα=P1P2x2−x1sinα=P1P2y2−y1
继续推导可得:
( x , y ) = ( x 1 , y 1 ) + ( x 2 − x 1 , y 2 − y 1 ) t P 1 P 2 (x, y)=(x_1,y_1)+(x_2-x_1, y_2-y_1)\dfrac{t}{P1P2} (x,y)=(x1,y1)+(x2−x1,y2−y1)P1P2t
而 t 的几何含义是 |t| = |P1P2|
图中 P(t) = P1 + (P2-P1)t 可以表示为:
( x , y ) = ( x 1 , y 1 ) + ( x 2 − x 1 , y 2 − y 1 ) t (x,y)=(x_1,y_1)+(x_2-x_1, y_2-y_1)t (x,y)=(x1,y1)+(x2−x1,y2−y1)t
那么为什么图片中的 t 的范围是 [0, 1]?
这里存在的问题就是直线段中两个端点是确定的,而推导当中的直线参数方程中的一点是变化的。两个的模型不同,因此不能这样推导。