关于数学:Ray-Sphere相交推导

Ray-Sphere Intersection Derivation

我正在尝试编写一个函数,如果射线与球相交并且我引用的代码是这样,则该函数返回true:

1
2
3
4
5
6
7
8
9
10
11
// given Sphere and Ray as arguments
invert the Sphere matrix
make new Ray object
  origin of this object = old Ray origin * inverted Sphere matrix
  direction = old Ray direction * inverted Sphere matrix
a = |new direction| ^ 2
b = dot product of new origin and new direction
c = |new origin| ^ 2 - 1

det = b*b - a*c
if det > 0 there is an intersection

我一直在理解为什么我们需要首先反转球体矩阵,然后将其乘以射线的原点和方向。 我也很困惑如何导出二次方程变量a,b和c以及结尾。 我知道我必须结合射线(p + td)和圆(x点x-1 = 0)的参数方程式,但是我不知道该怎么做。


您需要反转球体矩阵以使光线进入球体的坐标系中,如果未缩放球体,则与简单地设置new_origin = origin-sphere_center(并使用原始方向)相同。
该公式由以下公式形成:

1
|new_dir*t + new_origin|^2 = r^2 (presumably r is 1)

如果对其进行扩展,则会得到:

1
|new_dir|^2*t^2 + 2*(new_origin·new_dir)*t + |new_origin|^2-r^2 = 0