计算投影

129 阅读1分钟

设有两点坐标分别为S=(Sx,Sy,Sz)S = (S_x,S_y,S_z) , T=(Tx,Ty,Tz)T =(T_x,T_y,T_z) ,

平面 Π:Ax+By+Cz+D=0\Pi : Ax+ By + Cz + D = 0 .LstL_{st} 与平面相交于PP

设由S,TS,T连接形成的直线LST={x=λt+Sxy=μt+Syz=νt+SzL_{ST} = \left\{\begin{matrix} x =\lambda t + S_x \\ y = \mu t + S_y \\ z = \nu t + S_z\end{matrix}\right. 其中 {λ=TxSxμ=TySyν=Tzsz \left\{\begin{matrix} \lambda = T_x - S_x\\ \mu = T_y - S_y \\ \nu = T_z - s_z\end{matrix}\right.

要求出LSTL_{ST} 与平面Π\Pi 交点PP

将参数方程带入求解出参数tt

A(λt+Sx)+B(μt+Sy)+C(νt+Sz)+D=0A(\lambda t + S_x) + B(\mu t + S_y) + C(\nu t + S_z) + D = 0

t=ASx+BSy+CSz+DAλ+Bμ+Cνt= - \frac{AS_x + BS_y + CS_z + D}{A\lambda+ B\mu + C\nu}

则由参数方程可得VSP=[λtμtνt]V_{SP} = \begin{bmatrix} \lambda t \\ \mu t \\ \nu t\end{bmatrix} ins.png

然后计算分别沿xx 轴旋转α\alpha 角和zz 轴旋转β\beta 角的复合矩阵

(sinθ=Sθ,cosθ=Cθ)(sin\theta = S_\theta ,cos\theta = C_\theta)

Rz=[CαSα0SαCα0001]R_z = \begin{bmatrix}C_\alpha&-S_\alpha& 0\\ S_\alpha& C_\alpha & 0\\ 0& 0 & 1\end{bmatrix} Rx=[1000CβSβ0SβCβ]R_x =\begin{bmatrix}1 & 0 & 0\\ 0 & C_\beta & -S_\beta \\0 & S_\beta &C_\beta\end{bmatrix}

复合变换R=RxRz=[CαSα0SαCα0001][1000CβSβ0SβCβ]R = R_xR_z = \begin{bmatrix}C_\alpha&-S_\alpha& 0\\ S_\alpha& C_\alpha & 0\\ 0& 0 & 1\end{bmatrix} \begin{bmatrix}1 & 0 & 0\\ 0 & C_\beta & -S_\beta \\0 & S_\beta &C_\beta\end{bmatrix}

R=[CαSαCβSαSβSαCαCβCαSβ0SβCβ]R = \begin{bmatrix} C_\alpha & -S_\alpha C_\beta & S_\alpha S_\beta \\ S_\alpha & C_\alpha C_\beta & -C_\alpha S_\beta \\ 0 & S_\beta & C_\beta \end{bmatrix}

由图解可知,yy 轴于平面Π\Pi法向量平行w=[ABC]=[SαCβCαCβSβ]w = \begin{bmatrix}A\\ B\\C\end{bmatrix} = \begin{bmatrix}-S_\alpha C_\beta\\ C_\alpha C_\beta\\S_\beta\end{bmatrix}

设平面Π\PiSS 点距离为dd

d=ASx+BSy+CSz+DA2+B2+C2=Aλt+Bμt+CνtA2+B2+C2=Aλt+Bμt+Cνt=SαCβλt+CαCβμt+Sβνtd = \frac{|AS_x + BS_y + CS_z + D|}{\sqrt{A^2 + B^2 + C^2}} = \frac{A\lambda t + B\mu t + C \nu t}{\sqrt{A^2 + B^2 + C^2}} = A\lambda t + B\mu t + C \nu t = -S_\alpha C_\beta \lambda t + C_\alpha C_\beta\mu t + S_\beta\nu t

RR 为正交矩阵R1=RTR^{-1}= R^T

在以平面法向量方向为yy 轴方向,xx轴平行于地面平面的坐标系下,设USPU_{SP} 为逆旋转之后的向量坐标

USP=R1VSPU_{SP} = R^{-1}V_{SP}

USP=[CαSα0SαCβCαCβSβSαSβCαSβCβ][λtμtνt]U_{SP} = \begin{bmatrix} C_\alpha & S_\alpha & 0 \\-S_\alpha C_\beta & C_\alpha C_\beta & S_\beta\\ S_\alpha S_\beta & -C_\alpha S_\beta & C_\beta \end{bmatrix} \begin{bmatrix} \lambda t \\ \mu t \\ \nu t\end{bmatrix}

USP=[λCαt+μSβtSαCβλt+CαCβμt+SβνtSαSβλtCαSβμt+Cβνt]U_{SP} = \begin{bmatrix}\lambda C_\alpha t + \mu S_\beta t\\-S_\alpha C_\beta \lambda t + C_\alpha C_\beta\mu t + S_\beta\nu t \\ S_\alpha S_\beta\lambda t -C_\alpha S_\beta \mu t + C_\beta \nu t\end{bmatrix}

带入参数方程可得

USP=[λCαt+μSβtdSαSβλtCαSβμt+Cβνt]U_{SP} = \begin{bmatrix}\lambda C_\alpha t + \mu S_\beta t\\ d \\ S_\alpha S_\beta\lambda t -C_\alpha S_\beta \mu t + C_\beta \nu t\end{bmatrix}

USPU_{SP}x,zx,z 值就是屏幕上的坐标,以屏幕左下角为原点,dd 为平面到SS点的距离