【问题标题】:Intersection between line and sphere线与球的交点
【发布时间】:2015-04-02 06:24:46
【问题描述】:

我需要找到由以下等式定义的直线和球体之间的交点

直线: P = P0 + tv,其中P0 是相机的眼睛,v 是光线的方向。

球体: (P - Pc)^T (P - Pc) = r^2,其中Pc 是球体的中心,r 是半径

我将如何解决t

【问题讨论】:

  • P0 = (e, f, g)V = (u, v, w)Pc = (a, b, c)。然后将所有这些代入等式。您将在t 中得到一个二次方程,其中系数是efguvwa、@987654338 中的多项式cr。您可以使用二次公式来解决这个问题。

标签: graphics linear-algebra


【解决方案1】:

我假设 v 是标准化的。

直线最接近球心的点出现在 t1

v . (P0 + t1 v - Pc) = 0
v . (Pc - P0) = t1

在t1直线到球心的距离为

h = sqrt((Pc - P0)^2 - t1^2)

与球体表面的相交将在 t1 +/- td 发生(如果它发生的话),其中

td^2 + h^2 = r^2
td^2 = r^2 - h^2
     = r^2 - (Pc - P0)^2 + t1^2
     = r^2 - (Pc - P0)^2 + (v . (Pc - P0))^2

【讨论】:

  • 所以求解底部方程会给出交点?
  • @compsci45000:如果最后一个方程的右边是负数,那么就没有解。
【解决方案2】:

首先将坐标更改为球心上的系统。 P0 -> P0-Pc

现在你有了P0=(x0,y0,z0) 和射线坐标

x = x0+t*vx
y = y0+t*vy
z = z0+t*vz

并确保ǁvx,vy,vzǁ=1

球体方程为x^2+y^2+z^2-R^2 = 0,展开为

t^2 + 2*(vx*x0+vy*y0+vz*z0)*t + (x0^2+y0^2+z0^2-R^2) = 0
t^2 + 2*B*t+C =0 
  B = vx*x0+vy*y0+vz*z0
  C = x0^2+y0^2+z0^2-R^2
t = +√(B^2-C)/2-B
t = -√(B^2-C)/2-B

这给出了两个解决方案,p=Pc+P0+v*t 为两个 t 计算。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    相关资源
    最近更新 更多