用几何法推导三角形重心坐标

文章目录

  • 梯度
  • 过直线的平面的梯度与直线的关系
  • 求直线的隐式方程
  • 有向距离
  • 重心坐标
    • 何为重心坐标
    • 已知直角坐标,求重心坐标
    • 性质

梯度

概念:梯度是个向量。方向表示坡度最大的方向,模长表示坡度。
符号: ∇ \nabla

一元函数的梯度:
∇ f ( x ) = f ′ ( x ) \nabla f(x)=f^{\prime}(x) f(x)=f(x)
这里梯度是一维向量,有两个方向,x正向和负向。模长(绝对值)表示曲线在x处的斜率。

二元函数的梯度:
∇ f ( x , y ) = ( ∂ f ∂ x , ∂ f ∂ y ) \nabla f(x, y)=\left(\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}\right) f(x,y)=(xf,yf)
这里梯度是二维向量,有无数个方向,这个向量与OXY平面平行。模长表示曲面在(x,y,f(x,y))处最大的斜率。
说明:曲面在点(x,y,f(x,y))处,有无数条切线,每条切线都有自己的斜率,其中斜率最大值就是梯度的大小,斜率最大对应的切线在OXY平面的投影与梯度的方向平行。

示例如下图所示,曲面函数f(x,y)=x2+y2-1,点A(1,1,1)在曲面上,f(x,y)=0用黑色的圆表示:
用几何法推导三角形重心坐标_第1张图片
点A处的梯度为向量u=(2,2),褐色直线是点A处斜率最大的切线,斜率最大值是向量u的模长 2 2 2\sqrt2 22

过直线的平面的梯度与直线的关系

一种直线的形式:Ax+Bx+C=0
令f(x,y)=Ax+Bx+C,则该函数表示一个平面。

f(x,y)=x+y+1表示的平面如下图所示:
用几何法推导三角形重心坐标_第2张图片

  • 红色轴:X轴
  • 绿色轴:Y轴
  • 蓝色轴:Z轴
  • 蓝色平面:f(x,y)=x+y+1
  • 灰色平面:OXY平面
  • 蓝色与灰色平面交线:f(x,y)=0,即x+y+1=0。

f(x,y)的梯度:对x y求偏导得(1,1)
由于梯度向量恒为(1,1),所以在蓝色平面上的所有点处的梯度都一样。即平面上所有点处的最大坡度及指向最大坡度的方向都一样。

由于梯度向量一定是指向上坡方向的,那么梯度就与直线f(x,y)=0垂直。
用几何法推导三角形重心坐标_第3张图片

综上,f(x,y)=Ax+Bx+C的梯度(A,B),与直线f(x,y)=Ax+Bx+C=0垂直。

求直线的隐式方程

已知点M(x0,y0),N(x1,y1),如何求过两点的直线方程f(x,y)=Ax+By+C=0 ?

关键就是求得A B C三个系数的值

首先求A B的值,我们知道梯度向量n=(A,B)与直线垂直。设向量m=M-N,即m=(x1-x0,y1-y0)。
找一与向量m垂直的向量t (与n同向或反向),则t=kn (k≠0)。
显然,向量t与向量m的点积为0,即t·m=txmx+tymy=0。可以令tx=-my,ty=mx,这样就满足结果了。
求得:向量t=(y0-y1,x1-x0)

对于直线方程f(x,y)=Ax+By+C=0 ,两边同乘不为0的k得:kf(x,y)=kAx+kBy+kC=0。
由于t=kn,所以t=(kA,kB)。
求得:kA=(y0-y1),kB=(x1-x0)

从而(y0-y1)x+(x1-x0)y+kC=0,将M点带入方程,(y0-y1)x0+(x1-x0)y0+kC=0。
求得:kC=x0y1-x1y0
尽管有可能kA≠A,kB≠B,kC≠C,但是kAx+kBy+kC=0与Ax+By+C=0表示的是同一条直线。


综上,直线方程为:(y0-y1)x+(x1-x0)y+x0y1-x1y0=0

有向距离

设f(x,y)=x+y+1,令f(x,y)=0, 1, 2, -1,这四条直线的图像如下:

用几何法推导三角形重心坐标_第4张图片
从图像中可以发现,四条直线是平行的。直线与直线之间的距离,与对应的f(x,y)的值有一定关系。

考虑值与距离的关系:

  • a=f1-f0=1,b=f2-f0=2,c=f.3-f0=-1
  • b=2a,f2与f0之间的距离是f1与f0之间距离的2倍,f2与f1位于f0的同侧。
  • c=-a,f3与f0之间的距离与f1与f0之间距离相同,但f3与f1位于f0的异侧。

这里的a,b,c就是有向距离,有大小和方向。

已知任意点P,如何求点P到直线f(x,y)=0的距离?

看如下示例,点P=(xp,yp),直线f(x,y)=x+y+1=0,过点P做直线的垂线交于点Q,向量u=P-Q,那么向量u的模长就是P到直线的距离。
我们知道梯度向量v=(1,1)与直线垂直,所以u=kv,|u|=|k||v|。
用几何法推导三角形重心坐标_第5张图片
抽象之后,点P=(xp,yp),点Q=(xq,yq),直线f(x,y)=Ax+By+C,梯度向量v=(A,B)。
点到直线的有向距离(k无需取绝对值) d = k A 2 + B 2 d=k \sqrt{A^2+B^2} d=kA2+B2

显然,P=Q+u=Q+kv=(xq+kA,yq+kB)

求点P对应的f(x,y)的值:
f(xp,yp)=f(xq+kA,yq+kB)=A(xq+kA)+B(yq+kB)+C=Axq+Byq+C+kA2+kB2=kA2+kB2=k(A2+B2)
得: k = f ( x q , y q ) A 2 + B 2 k=\frac{f(x_q, y_q)}{A^2+B^2} k=A2+B2f(xq,yq)

综上,点P=(xq,yq)到直线f(x,y)=Ax+By+C=0的距离为: d = f ( x q , y q ) A 2 + B 2 d=\frac{f(x_q, y_q)}{\sqrt{A^2+B^2}} d=A2+B2 f(xq,yq)

如果,我们知道两点M=(x0,y0),N=(x1,y1),那么就能写出任意点P(x,y)到点M,N所在直线的有向距离的函数d(x,y):

d ( x , y ) = y 0 − y 1 ( x 1 − x 0 ) 2 + ( y 0 − y 1 ) 2 x + x 1 − x 0 ( x 1 − x 0 ) 2 + ( y 0 − y 1 ) 2 y + x 0 y 1 − x 1 y 0 ( x 1 − x 0 ) 2 + ( y 0 − y 1 ) 2 \begin{aligned} d(x, y)= \frac{y_0-y_1}{\sqrt{\left(x_1-x_0\right)^2+\left(y_0-y_1\right)^2}} x+\frac{x_1-x_0}{\sqrt{\left(x_1-x_0\right)^2+\left(y_0-y_1\right)^2}} y +\frac{x_0 y_1-x_1 y_0}{\sqrt{\left(x_1-x_0\right)^2+\left(y_0-y_1\right)^2}} \end{aligned} d(x,y)=(x1x0)2+(y0y1)2 y0y1x+(x1x0)2+(y0y1)2 x1x0y+(x1x0)2+(y0y1)2 x0y1x1y0

重心坐标

何为重心坐标

直角坐标系

设点P的坐标为(2,3),在平面直角坐标系下的P如下图所示:
用几何法推导三角形重心坐标_第6张图片

换另一个角度思考,设点O的坐标为(0,0),向量u的坐标为(1,0),向量v的坐标为(0,1),向量w的坐标为(2,3)
用几何法推导三角形重心坐标_第7张图片
显然:w=2u+3v,P=O+w=O+2u+3v

在图上添加点B(1,0),点C(0,1),修改点O的标识为A
用几何法推导三角形重心坐标_第8张图片
显然:u=B-A,v=C-A,则P=A+2(B-A)+3(C-A)=-4A+2B+3C
令α=-4,β=2,γ=3,则P=αA+βB+γC,且α+β+γ=1
注意:α+β+γ=1≡1

证明如下:
P = A + m ( B − A ) + n ( C − A ) P=A+m(B-A)+n(C-A) P=A+m(BA)+n(CA)
P = ( 1 − m − n ) A + m B + n C P=(1-m-n) A+m B+n C P=(1mn)A+mB+nC
α = 1 − m − n , β = m , γ = n \alpha=1-m-n, \quad \beta=m, \quad \gamma=n α=1mn,β=m,γ=n
∴ α + β + γ = 1 \therefore \alpha+\beta+\gamma=1 α+β+γ=1

我们可以使用三维坐标(α,β,γ)表示,这里的坐标就是关于三角形ABC的重心坐标。
在上面的这种特殊情况,β=x, γ=y,而α≡1-β-γ


非直角坐标系

非直角坐标系与直角坐标系类似:

  • 直角坐标系:横轴是X轴,纵轴是Y轴,横轴与纵轴垂直,用(x,y)表示点的坐标
  • 非直角坐标系:横轴是β轴,纵轴是γ轴,横轴与纵轴不垂直,用(β,γ)表示点的坐标

示例如下图:
用几何法推导三角形重心坐标_第9张图片
在图示的非直角坐标系下:
点A坐标(0,0),点B坐标(1,0),点C坐标(0,1),点P坐标(2,2)
向量u=B-A,向量v=C-A
P=A+2u+2v=A+2(B-A)+2(C-A)=-3A+2B+2C
α=-3,β=2,γ=2

点P关于三角形ABC的重心坐标为(-3,2,2)

值得注意的是,虽然点P的坐标是(2,2),但其关于三角形ABC的重心坐标却和ABC三个点息息相关
用几何法推导三角形重心坐标_第10张图片
这里,点A坐标(0,0),点B坐标(4,0),点C坐标(0,2)
向量u=B-A,向量v=C-A
P=A+0.5u+v=A+0.5(B-A)+(C-A)=-0.5A+0.5B+C
α=-0.5,β=0.5,γ=1

点P关于三角形ABC的重心坐标为(-0.5,0.5,1)

已知直角坐标,求重心坐标

在直角坐标系下,点P(xp,yp),点A(xa,ya),点B(xb,yb),点C(xc,yc)。
设f(x,y)=0为AC所在直线的方程,g(x,y)=0为AB所在直线的方程。

在非直角坐标系下,为了方便计算点P(β,γ),我们规定点A(0,0),点B(1,0),点C(0,1)。

求β

  1. 过点B作AC所在直线的垂线于点D
  2. 过点P作AC所在直线的垂线于点E
  3. 过点P作AC所在直线的平行线L,L交AB所在直线于点H
  4. 过点H作AC所在直线的垂线于点F

用几何法推导三角形重心坐标_第11张图片

显然 P E = H F 显然P E=H F 显然PE=HF

∵ △ A B D ∽ △ A H F \because \triangle A B D \backsim \triangle A H F ABDAHF

∴ H F B D = A H A B \therefore \frac{H F}{B D}=\frac{A H}{A B} BDHF=ABAH

∵ B = ( 1 , 0 ) , A = ( 0 , 0 ) \because B=(1,0), A=(0,0) B=(1,0),A=(0,0)

∴ A B = 1 , 则 β = A H = P E B D \therefore A B=1, 则 \beta =A H=\frac{P E}{B D} AB=1,β=AH=BDPE

已知 P E B D = f ( x p , y p ) f ( x b , y b ) , 且 f ( x , y ) = ( y a − y c ) x + ( x c − x a ) y + x a y c − x c y a 已知\frac{P E}{B D}=\frac{f\left(x_{p}, y_{p}\right)}{f\left(x_{b}, y_{b}\right)}, 且f(x, y)=\left(y_{a}-y_{c}\right) x+\left(x_{c}-x_{a}\right) y+x_{a} y_{c}-x_{c} y_{a} 已知BDPE=f(xb,yb)f(xp,yp),f(x,y)=(yayc)x+(xcxa)y+xaycxcya

∴ β = ( y a − y c ) x p + ( x p − x a ) y p + x a y c − x c y a ( y a − y c ) x b + ( x c − x a ) y b + x a y c − x c y a \therefore \beta=\frac{\left(y_{a}-y_{c}\right) x_{p}+\left(x_{p}-x_{a}\right) y_{p}+x_{a} y_{c}-x_{c} y_{a}}{\left(y_{a}-y_{c}\right) x_{b}+\left(x_{c}-x_{a}\right) y_{b}+x_{a} y_{c}-x_{c} y_{a}} β=(yayc)xb+(xcxa)yb+xaycxcya(yayc)xp+(xpxa)yp+xaycxcya


求γ

  1. 过点C作AB所在直线的垂线于点F
  2. 过点P作AB所在直线的垂线于点G
  3. 过点P作AB所在直线的平行线L,L交AC所在直线于点D
  4. 过点D作AB所在直线的垂线于点E

用几何法推导三角形重心坐标_第12张图片

显然 P G = D E 显然P G=D E 显然PG=DE

∵ △ A D E ∽ △ A C F \because \triangle A D E \backsim \triangle A C F ADEACF

∴ D E C F = A D A C \therefore \frac{D E}{C F}=\frac{A D}{A C} CFDE=ACAD

∵ C = ( 0 , 1 ) , A = ( 0 , 0 ) \because C=(0,1), A=(0,0) C=(0,1),A=(0,0)

∴ A C = 1 , 则 γ = A D = P G C F \therefore A C=1, 则\gamma= A D=\frac{P G}{C F} AC=1,γ=AD=CFPG

已知 P A C F = g ( x p , y p ) g ( x c , y c ) , 且 g ( x , y ) = ( y a − y b ) x + ( x b − x a ) y + x a y b − x b y a 已知\frac{P A}{C F}=\frac{g\left(x_{p}, y_{p}\right)}{g\left(x_{c}, y_{c}\right)}, 且g(x, y)=\left(y_{a}-y_{b}\right) x+\left(x_{b}-x_{a}\right) y+x_{a} y_{b}-x_{b} y_{a} 已知CFPA=g(xc,yc)g(xp,yp),g(x,y)=(yayb)x+(xbxa)y+xaybxbya

∴ γ = ( y a − y b ) x p + ( x b − x a ) y p + x a y b − x b y a ( y a − y b ) x c + ( x b − x a ) y c + x a y b − x b y a \therefore \gamma=\frac{\left(y_{a}-y_{b}\right) x_{p}+\left(x_{b}-x_{a}\right) y_{p}+x_{a} y_{b}-x_{b} y_{a}}{\left(y_{a}-y_{b}\right) x_{c}+\left(x_{b}-x_{a}\right) y_{c}+x_{a} y_{b}-x_{b} y_{a}} γ=(yayb)xc+(xbxa)yc+xaybxbya(yayb)xp+(xbxa)yp+xaybxbya

通过上面的讨论,直角坐标系P(xp,yp),A(xa,ya),B(xb,yb),C(xc,yc),非直角坐标系P的坐标:
P = ( β , γ ) = ( ( y a − y c ) x p + ( x p − x a ) y p + x a y c − x c y a ( y a − y c ) x b + ( x c − x a ) y b + x a y c − x c y a , ( y a − y b ) x p + ( x b − x a ) y p + x a y b − x b y a ( y a − y b ) x c + ( x b − x a ) y c + x a y b − x b y a ) P=(\beta ,\gamma)=(\frac{\left(y_{a}-y_{c}\right) x_{p}+\left(x_{p}-x_{a}\right) y_{p}+x_{a} y_{c}-x_{c} y_{a}}{\left(y_{a}-y_{c}\right) x_{b}+\left(x_{c}-x_{a}\right) y_{b}+x_{a} y_{c}-x_{c} y_{a}},\frac{\left(y_{a}-y_{b}\right) x_{p}+\left(x_{b}-x_{a}\right) y_{p}+x_{a} y_{b}-x_{b} y_{a}}{\left(y_{a}-y_{b}\right) x_{c}+\left(x_{b}-x_{a}\right) y_{c}+x_{a} y_{b}-x_{b} y_{a}}) P=(β,γ)=((yayc)xb+(xcxa)yb+xaycxcya(yayc)xp+(xpxa)yp+xaycxcya,(yayb)xc+(xbxa)yc+xaybxbya(yayb)xp+(xbxa)yp+xaybxbya)

直角坐标系P(xp,yp),A(xa,ya),B(xb,yb),C(xc,yc),点P关于三角形ABC的重心坐标:
P = ( α , β , γ ) P=(\alpha,\beta ,\gamma) P=(α,β,γ)
α = 1 − β − γ \alpha = 1-\beta-\gamma α=1βγ
β = ( y a − y c ) x p + ( x p − x a ) y p + x a y c − x c y a ( y a − y c ) x b + ( x c − x a ) y b + x a y c − x c y a \beta = \frac{\left(y_{a}-y_{c}\right) x_{p}+\left(x_{p}-x_{a}\right) y_{p}+x_{a} y_{c}-x_{c} y_{a}}{\left(y_{a}-y_{c}\right) x_{b}+\left(x_{c}-x_{a}\right) y_{b}+x_{a} y_{c}-x_{c} y_{a}} β=(yayc)xb+(xcxa)yb+xaycxcya(yayc)xp+(xpxa)yp+xaycxcya
γ = ( y a − y b ) x p + ( x b − x a ) y p + x a y b − x b y a ( y a − y b ) x c + ( x b − x a ) y c + x a y b − x b y a ) \gamma = \frac{\left(y_{a}-y_{b}\right) x_{p}+\left(x_{b}-x_{a}\right) y_{p}+x_{a} y_{b}-x_{b} y_{a}}{\left(y_{a}-y_{b}\right) x_{c}+\left(x_{b}-x_{a}\right) y_{c}+x_{a} y_{b}-x_{b} y_{a}}) γ=(yayb)xc+(xbxa)yc+xaybxbya(yayb)xp+(xbxa)yp+xaybxbya)

性质

在研究性质时,使用简单的例子观察较好,不仅简单,而且好发现规律。
用几何法推导三角形重心坐标_第13张图片
如图点P(0.5,0.5),其β=0.5,γ=0.5,α=0。

先考虑三个特殊点ABC:

  • 当点P位于点C时,β=0,γ=1,α=0;
  • 同样当点P位于点B时β=1,γ=0,α=0;
  • 当点P位于点A时β=0,γ=0,α=1。

再考虑三条边界线:

  • 当点P位于线段BC上时,0≤β≤1,0≤γ≤1,且β+γ=1,则α=0。
  • 当点P位于线段AC上时,β=0,0≤γ≤1,则α+γ=1,且0≤α≤1。
  • 当点P位于线段AB上时,0≤β≤1,γ=0,则α+β=1,且0≤α≤1。

用几何法推导三角形重心坐标_第14张图片

综上,当点P位于三角形ABC内部时,0<α<1,0<β<1,0<γ<1。
当点P位于三角形ABC的一条边上时,α,β,γ中有一个值为0,其他两个值位于0~1之间(闭区间)。
当点P位于三角形ABC的一个顶点时,α,β,γ中有两个值为0,剩余一个值为1。

你可能感兴趣的:(计算机图形学,重心坐标)