【数学】交点计算

【数学】交点计算

线与面相交

将线参数方程作为参数带入到面的一般式方程中

nxp(nxlt+pxl)+nyp(nylt+pyl)+nzp(nzlt+pzl)nppp=0(nxpnxl+nypnyl+nzpnzl)t+(nxppxl+nyppyl+nzppzl)nppp=0(npnl)t+npplnppp=0(npnl)t=npppnpplt=npppnpplnpnlt=np(pppl)npnl \begin{aligned} \vec{n}^p_x(\vec{n}^l_xt+\vec{p}^l_x)+\vec{n}^p_y(\vec{n}^l_yt+\vec{p}^l_y)+\vec{n}^p_z(\vec{n}^l_zt+\vec{p}^l_z)-\vec{n}^p\cdot\vec{p}^p&=0\\ (\vec{n}^p_x\vec{n}^l_x+ \vec{n}^p_y\vec{n}^l_y+\vec{n}^p_z\vec{n}^l_z) t+(\vec{n}^p_x\vec{p}^l_x+\vec{n}^p_y\vec{p}^l_y+\vec{n}^p_z\vec{p}^l_z)-\vec{n}^p\cdot\vec{p}^p&=0\\ (\vec{n}^p\cdot\vec{n}^l)t+\vec{n}^p\cdot\vec{p}^l-\vec{n}^p\cdot\vec{p}^p&=0\\ (\vec{n}^p\cdot\vec{n}^l)t&=\vec{n}^p\cdot\vec{p}^p-\vec{n}^p\cdot\vec{p}^l\\ t&=\frac{\vec{n}^p\cdot\vec{p}^p-\vec{n}^p\cdot\vec{p}^l}{\vec{n}^p\cdot\vec{n}^l}\\ t&=\frac{\vec{n}^p\cdot(\vec{p}^p-\vec{p}^l)}{\vec{n}^p\cdot\vec{n}^l}\\ \end{aligned}

再将 tt 带入回直线方程中即可获得交点位置。

线与球相交

  • 线:o+nt\vec{o}+\vec{n}*t(可代表线上任意一点)
    • a:线起点
    • b:线法向
    • t:线上任意点离起点的距离
  • 球:(pc)(pc)=r2(\vec{p}-\vec{c}) \cdot (\vec{p}-\vec{c}) = r^2
    • p:球上任意点
    • c:球心
    • r:球半径

将线上的点带入到球公式中:

(o+tnc)(o+tnc)=r2(tn+(oc))(tn+(oc))=r2t2nn+2tn(oc)+(oc)(oc)r2=0 \begin{aligned} (\vec{o}+t\vec{n}-\vec{c})\cdot(\vec{o}+t\vec{n}-\vec{c}) &= r^2 \\ (t\vec{n}+(\vec{o}-\vec{c}))\cdot(t\vec{n}+(\vec{o}-\vec{c})) &= r^2 \\ t^2\vec{n}\cdot\vec{n}+2t\vec{n}\cdot(\vec{o}-\vec{c})+(\vec{o}-\vec{c})\cdot(\vec{o}-\vec{c})-r^2&=0\\ \end{aligned}

该方程为一元二次方程,可以用求根公式来解:

  • a=nna=\vec{n}\cdot\vec{n}
  • b=2n(oc)b=2\vec{n}\cdot(\vec{o}-\vec{c})
  • c=(oc)(oc)r2c=(\vec{o}-\vec{c})\cdot(\vec{o}-\vec{c})-r^2
  • discriminant=b24acdiscriminant=b^2-4ac
  • t=b±discriminant2at=\frac{-b \pm \sqrt{discriminant}}{2a}

若设 h=n(oc)h=\vec{n}\cdot(\vec{o}-\vec{c}),即 b=2hb=2h,则该公式还可以进一步化简:

t=2h±4(h2ac)2a=h±(h2ac)at=\frac{-2h \pm \sqrt{4(h^2-ac)}}{2a}=\frac{-h\pm (h^ 2 −ac)}{a}

由于正向线性变化不影响判别式结果,故判别式也可以优化。最终的计算公式如下:

  • a=nna=\vec{n}\cdot\vec{n}
  • h=n(oc)h=\vec{n}\cdot(\vec{o}-\vec{c})
  • c=(oc)(oc)r2c=(\vec{o}-\vec{c})\cdot(\vec{o}-\vec{c})-r^2
  • d=h2acd=h^2-ac
  • t=h±dat=\frac{-h\pm d}{a}

d>0d>0 时,交点有两个;$ d=0$ 时,交点有一个。将求出的 t 带入到直线方程即可求出交点:o+nt\vec{o}+\vec{n}*t


【数学】交点计算
https://bdffzi-blog.pages.dev/posts/3519951511.html
作者
BDFFZI
发布于
2025年6月9日
许可协议