2021国赛A题第三问 - 点关于三维直线的对称点 - 入射光的反射向量

本文详细解析了三维空间中点关于过原点直线的对称点公式,以及如何利用该公式求入射光的反射向量。通过实例展示了如何通过向量交叉和对称点公式求得反射方向,适合数学建模竞赛和计算机视觉应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点关于三维向量的对称点 - 入射光的反射向量

前几天做数学建模国赛发现第三问用到了入射光线反射问题的求解,当时没有找到现成的公式,仅仅是根据此题的特殊条件直接推导出了解,这里讨论一下标准情况下的解

注意:尽管限制了直线要过原点,反射向量也是方向向量,但是只要求出来反射向量的方向向量,再加上一个起始点与终点平面即可得到所有反射平面上点所对应在目标平面上的落点,不懂的可以多想几遍


点关于过原点三维直线的对称点

设已知点为 A ( x a , y a , z a ) A(x_{a},y_{a},z_{a}) A(xa,ya,za) ,过原点直线的方向向量为 K ( x 0 , y 0 , z 0 ) K(x_{0},y_{0},z_{0}) K(x0,y0,z0) ,待求对称点为 B ( x b , y b , z b ) B(x_{b},y_{b},z_{b}) B(xb,yb,zb)

{ x b = x a ( x 0 2 − y 0 2 − z 0 2 ) + 2 x 0 ( y 0 y a + z 0 z a ) x 0 2 + y 0 2 + z 0 2 y b = y a ( − x 0 2 + y 0 2 − z 0 2 ) + 2 y 0 ( x 0 x a + z 0 z a ) x 0 2 + y 0 2 + z 0 2 z b = z a ( − x 0 2 − y 0 2 + z 0 2 ) + 2 z 0 ( x 0 x a + y 0 y a ) x 0 2 + y 0 2 + z 0 2 \left\{\begin{matrix} x_{b}=\cfrac{ x_{a} ( x_{0}^2 - y_{0}^2 - z_{0}^2 ) + 2x_{0} ( y_{0} y_{a} + z_{0} z_{a} ) }{x_{0}^2+y_{0}^2+z_{0}^2}\\\\ y_{b}=\cfrac{ y_{a} ( -x_{0}^2 + y_{0}^2 - z_{0}^2 ) + 2y_{0} ( x_{0} x_{a} + z_{0} z_{a} ) }{x_{0}^2+y_{0}^2+z_{0}^2}\\\\ z_{b}=\cfrac{ z_{a} ( -x_{0}^2 - y_{0}^2 + z_{0}^2 ) + 2z_{0} ( x_{0} x_{a} + y_{0} y_{a} ) }{x_{0}^2+y_{0}^2+z_{0}^2} \end{matrix}\right. xb=x02+y02+z02xa(x02y02z02)+2x0(y0ya+z0za)yb=x02+y02+z02ya(x02+y02z02)+2y0(x0xa+z0za)zb=x02+y02+z02za(x02y02+z02)+2z0(x0xa+y0ya)

入射光的反射向量的方向向量

已知入射光线方向向量 M M M
M ( x m , y m , z m ) M(x_{m},y_{m},z_{m}) M(xm,ym,zm)

反方向入射光线 A A A
A ( x a , y a , z a ) = − M = ( − x m , − y m , − z m ) A(x_{a},y_{a},z_{a})=-M=(-x_{m},-y_{m},-z_{m}) A(xa,ya,za)=M=(xm,ym,zm)

已知反射面上的三个点 D 1 , D 2 , D 3 D_{1},D_{2},D_{3} D1,D2,D3
D 1 ( x d 1 , y d 1 , z d 1 ) , D 2 ( x d 1 , y d 1 , z d 1 ) , D 3 ( x d 1 , y d 1 , z d 1 ) D_{1}(x_{d1},y_{d1},z_{d1}), D_{2}(x_{d1},y_{d1},z_{d1}), D_{3}(x_{d1},y_{d1},z_{d1}) D1(xd1,yd1,zd1)D2(xd1,yd1,zd1)D3(xd1,yd1,zd1)

进而得到反射面上两个不平行的两个向 H , L H,L H,L
H ( x h , y h , z h ) = D 1 − D 2 L ( x l , y l , z l ) = D 1 − D 3 H(x_{h},y_{h},z_{h})=D_{1}-D_{2}\\L(x_{l},y_{l},z_{l})=D_{1}-D_{3} H(xh,yh,zh)=D1D2L(xl,yl,zl)=D1D3

使用向量叉乘得到平面法向量 K K K
K ( x k , y k , z k ) = H × L = ( y h z l − z h y l , z h x l − x h z l , x h z l − z h x l ) K(x_{k},y_{k},z_{k})=H×L=(y_{h}z_{l}-z_{h}y_{l},z_{h}x_{l}-x_{h}z_{l},x_{h}z_{l}-z_{h}x_{l}) K(xk,yk,zk)=H×L=(yhzlzhyl,zhxlxhzl,xhzlzhxl)

然后直接使用上方点关于三维直线的对称点公式得到向量A关于K的对称向量B(这里都假设向量起始点为 O ( 0 , 0 , 0 ) O(0,0,0) O(0,0,0)),此向量就是反射光方向向量

思路

说明
点其实也可以看作一种向量,只是起点位于原点而已


点关于三维直线的对称点
在这里插入图片描述
A ( x a , y a , z a )    K ( x 0 , y 0 , z 0 )    B ( x b , y b , z b ) A(x_{a},y_{a},z_{a})~~K(x_{0},y_{0},z_{0})~~B(x_{b},y_{b},z_{b}) A(xa,ya,za)  K(x0,y0,z0)  B(xb,yb,zb)

如图B为A关于K向量的对称点,M为AB中点,因为AB关于K对称,所以AB⊥K(含有一个方程),且向量M与K方向相同,所以M∥K(含有两个方程),一共三个未知数三个方程

{ x a + x b x 0 = y a + y b y 0 x a + x b x 0 = z a + z b z 0 x 0 ( x a − x b ) + y 0 ( y a − y b ) + z 0 ( z a − z b ) = 0 \left\{\begin{matrix} \cfrac{x_{a}+x_{b}}{x_{0}}=\cfrac{y_{a}+y_{b}}{y_{0}}\\\\ \cfrac{x_{a}+x_{b}}{x_{0}}=\cfrac{z_{a}+z_{b}}{z_{0}}\\\\ x_{0}(x_{a}-x_{b})+y_{0}(y_{a}-y_{b})+z_{0}(z_{a}-z_{b})=0 \end{matrix}\right. x0xa+xb=y0ya+ybx0xa+xb=z0za+zbx0(xaxb)+y0(yayb)+z0(zazb)=0

即可解得

{ x b = x a ( x 0 2 − y 0 2 − z 0 2 ) + 2 x 0 ( y 0 y a + z 0 z a ) x 0 2 + y 0 2 + z 0 2 y b = y a ( − x 0 2 + y 0 2 − z 0 2 ) + 2 y 0 ( x 0 x a + z 0 z a ) x 0 2 + y 0 2 + z 0 2 z b = z a ( − x 0 2 − y 0 2 + z 0 2 ) + 2 z 0 ( x 0 x a + y 0 y a ) x 0 2 + y 0 2 + z 0 2 \left\{\begin{matrix} x_{b}=\cfrac{ x_{a} ( x_{0}^2 - y_{0}^2 - z_{0}^2 ) + 2x_{0} ( y_{0} y_{a} + z_{0} z_{a} ) }{x_{0}^2+y_{0}^2+z_{0}^2}\\\\ y_{b}=\cfrac{ y_{a} ( -x_{0}^2 + y_{0}^2 - z_{0}^2 ) + 2y_{0} ( x_{0} x_{a} + z_{0} z_{a} ) }{x_{0}^2+y_{0}^2+z_{0}^2}\\\\ z_{b}=\cfrac{ z_{a} ( -x_{0}^2 - y_{0}^2 + z_{0}^2 ) + 2z_{0} ( x_{0} x_{a} + y_{0} y_{a} ) }{x_{0}^2+y_{0}^2+z_{0}^2} \end{matrix}\right. xb=x02+y02+z02xa(x02y02z02)+2x0(y0ya+z0za)yb=x02+y02+z02ya(x02+y02z02)+2y0(x0xa+z0za)zb=x02+y02+z02za(x02y02+z02)+2z0(x0xa+y0ya)



入射光的反射向量
在这里插入图片描述
M ( x m , y m , z m ) M(x_{m},y_{m},z_{m}) M(xm,ym,zm)

A ( x a , y a , z a ) = − M = ( − x m , − y m , − z m ) A(x_{a},y_{a},z_{a})=-M=(-x_{m},-y_{m},-z_{m}) A(xa,ya,za)=M=(xm,ym,zm)

{    H ( x h , y h , z h ) = D 1 − D 2 L ( x l , y l , z l ) = D 1 − D 3 \left\{\begin{matrix} ~~H(x_{h},y_{h},z_{h})=D_{1}-D_{2}\\\\ L(x_{l},y_{l},z_{l})=D_{1}-D_{3} \end{matrix}\right.   H(xh,yh,zh)=D1D2L(xl,yl,zl)=D1D3

K ( x k , y k , z k ) = H × L = ( y h z l − z h y l , z h x l − x h z l , x h z l − z h x l ) K(x_{k},y_{k},z_{k})=H×L=(y_{h}z_{l}-z_{h}y_{l},z_{h}x_{l}-x_{h}z_{l},x_{h}z_{l}-z_{h}x_{l}) K(xk,yk,zk)=H×L=(yhzlzhyl,zhxlxhzl,xhzlzhxl)


得到KA之后可以直接得到反射向量的方向向量B

建议分步带入,先算K和A再带入上边,不然公式太长了


获取对称向量的matlab代码

function out = get_symmetry(a,k)
%get_symmetry 获取向量a关于向量k的对称向量

sum = k(1)^2+k(2)^2+k(3)^2;

x = (a(1)*(k(1)^2-k(2)^2-k(3)^2) + 2*k(1)*(k(2)*a(2)+k(3)*a(3)))/sum;
y = (a(2)*(-k(1)^2+k(2)^2-k(3)^2) + 2*k(2)*(k(1)*a(1)+k(3)*a(3)))/sum;
z = (a(3)*(-k(1)^2-k(2)^2+k(3)^2) + 2*k(3)*(k(1)*a(1)+k(2)*a(2)))/sum;

out = [x,y,z];
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值