Php 如何以编程方式计算直线和平面之间的交点?
我有一个三维空间中平面的公式Php 如何以编程方式计算直线和平面之间的交点?,php,algorithm,math,3d,shared-libraries,Php,Algorithm,Math,3d,Shared Libraries,我有一个三维空间中平面的公式 -2658985.48304*(x+2658985.48304) -5346635.44099*(y+5346635.44099) +5269212.43874*(z-5269212.43874) = 0 我还有一个三维空间中直线的向量公式 r(t) = ( 4077149.9388, 14675462.7240,-11546186.0029) + t*(-10458715.0981,-27507387.7824,-24192295.8559)
-2658985.48304*(x+2658985.48304)
-5346635.44099*(y+5346635.44099)
+5269212.43874*(z-5269212.43874) = 0
我还有一个三维空间中直线的向量公式
r(t) = ( 4077149.9388, 14675462.7240,-11546186.0029)
+ t*(-10458715.0981,-27507387.7824,-24192295.8559)
有没有办法用PHP(或其他编程语言)编程计算平面和向量之间的交点?有。。。您需要通过其法线
n
和属于该平面的任何点q
来描述您的平面。通过将方程式转换为以下公式,法线很容易:
dot( n , (x,y,z) ) = D
其中n
是平面法线。必须通过将2个坐标设置为任意值并计算第3个坐标来计算q
,但是,如果平面平行于xy
、yz
或zx
平面,则需要选择正在更改的坐标。。。所以选择2个abs最小的法线坐标,你会没事的
在您的情况下,法线是直接可见的:
n = (2658985.48304,-5346635.44099,5269212.43874)
因此,您应该为q
生成x,z
并计算y
。为了简单起见,让x=z=0
t = dot( q-p0 , dp )
p = p0 + t*dp
您已经有了向量形式的行:
p(t) = p0 + t*dp
其中,p0
是行的起点,dp
是end\u point-start\u point
,t
是范围内的标量参数t=
由此,您可以使用向量数学来获得交点p
t = dot( q-p0 , dp )
p = p0 + t*dp
但是,您需要检查该点是否在直线内,以便:
t >= 0.0 AND t <= 1.0
t>=0.0和t您希望构建一个小脚本,该脚本允许您计算平面(P)与直线的所有交点,例如,平面将定义为P=3x+2y− z=8和定义为例如x=2t、y=3+2t、z=2t的线。这就是基本的想法?到目前为止你试过什么?向我们展示你的最佳尝试(代码),这样我们就可以帮助你解决任何你可能面临的问题。为什么你认为这条线是一个段,即 t/code >介于0和1之间?一条数学线通常是无限的,我在OP的问题中看不到这样的限制。@Damien:)这在翻译中丢失了。。。在我的语言中,线有不同的含义(线总是线段,我们用(半)轴表示无限长的线)无论如何,注释出这个条件将对无限长的线起作用。。。
| dot ( n , q ) - D | <= 1e-6