三维空间直线与直线的交点

该博客详细介绍了如何在三维空间中求解两条直线的交点。首先判断直线是否不平行且共面,然后利用正弦定理建立方程,通过求解得出可能的交点。内容涉及向量的乘法、叉乘、点乘及单位化,并提供了计算步骤和特殊情况处理。

已知

三维空间中两个直线
直线1:方向V1V_{1}V1 直线上的任意一个点P1P_{1}P1
直线2:方向V2V_{2}V2 直线上的任意一个点P2P_{2}P2
为了方便计算上面的方向向量VVV均为单位向量
(从这里可以看出其实描述一个直线线只用5个数就可以 了,这个跟本文无关只是白话一下)
示意图如

在这里插入图片描述

求解过程

下文中∗×⋅unit()mod()*\times\centerdot unit()mod()×unit()mod()分别表示乘、叉乘、点乘、取单位向量、取向量的模
首先应该确保两个直线不平行,且共面
不平行判断 ∣V1×V2∣≠0|V_{1}\times V_{2}|\not=0V1×V2=0 或者 ∣V1⋅V2∣∣V1∣∗∣V2∣≠1\frac{|V_{1}\centerdot V_{2}|}{|V_{1}|* |V_{2}|} \not= 1V1V2V1V2=1
共面判断(V1×V2)⋅(P2−P1)==0(V_{1}\times V_{2})\centerdot(P_{2}-P_{1})==0(V1×V2)(P2P1)==0
注意这里还要判断P1==P2P_1==P_2P1==P2如果相等了就直接返回结果就行

满足上面的条件后 假设交点为PXP_{X}PX
PX=P1+k1∗V1P_X=P_1+k1*V1PX=P1+k1V1
或者PX=P2+k2∗V2P_X=P_2+k2*V2PX=P2+k2V2

P1P2PXP_1 P_2 P_XP1P2PX三点构成三角形必然满足正弦定理

mod(P1−P2)sin(∠P1PXP2)=mod(PX−P1)sin(∠P1P2PX)\frac{mod(P_1-P_2)}{sin(\angle P_1P_XP_2)} =\frac{mod(P_X-P_1)}{sin(\angle P_1P_2P_X)}sin(P1PXP2)mod(P1P2)=sin(P1P2PX)mod(PXP1)

其中sin(∠P1PXP2)=mod(V2×V1)sin(\angle P_1P_XP_2) = mod(V_2\times V_1)sin(P1PXP2)=mod(V2×V1) (因为是单位向量所以直接取模)
同理sin(∠P1P2PX)=mod(V2×unit(P1−P2))sin(\angle P_1P_2P_X) =mod(V2\times unit(P_1-P_2))sin(P1P2PX)=mod(V2×unit(P1P2))
因为 PX=P1+k1∗V1P_X=P_1+k1*V_1PX=P1+k1V1
所以 mod(PX−P1)=∣k1∣mod(P_X-P_1) = |k1|mod(PXP1)=k1∣
重新整理可以得到

mod(P1−P2)mod(V2×V1)=∣k1∣mod(V2×unit(P1−P2))\frac {mod(P_1-P_2)}{mod(V_2\times V_1) }= \frac {|k1|}{mod(V2\times unit(P_1-P_2))}mod(V2×V1)mod(P1P2)=mod(V2×unit(P1P2))k1∣

前面的判断保证了这里的分母都不是0
根据正负k1k1k1分别算出两个点
PX1P_{X1}PX1PX2P_{X2}PX2
判断PX1−P2P_{X1}-P_2PX1P2PX2−P2P_{X2}-P_2PX2P2哪个与V2V2V2平行哪个就是结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值