我正在研究光线追踪器的数学,但我并没有遵循我读过的关于该主题的几乎每篇文章中的过渡。这就是我所拥有的:
球体公式:
(X - Cx)^2 + (Y - Cy)^2 + (Z - Cz)^2 - R^2 = 0
其中R为半径,C为圆心,X、Y、Z为球面内的所有点。
线的公式:
X + DxT,Y + DyT,Z + DzT
其中 D 是直线的归一化方向向量,X、Y、Z 是直线上的所有点,T 是直线上某个点的参数。
通过将直线的分量代入球面方程,我们得到:
(X + DxT - Cx)^2 + (Y + DyT - Cy)^2 + (Z + DzT - Cz)^2 - R^2 = 0
我一直追随到那一点(至少我认为我这样做),但是我读过的每一个教程都会从那个跳到一个二次方程而没有解释它(这是从其中一个站点复制的,所以术语是和我的例子有点不同):
A = Xd^2 + Yd^2 + Zd^2
B = 2 * (Xd * (X0 - Xc) + Yd * (Y0 - Yc) + Zd * (Z0 - Zc))
C = (X0 - Xc)^2 + (Y0 - Yc)^2 + (Z0 - Zc)^2 - Sr^2
我知道如何使用二次公式求解 T,但我不明白他们如何从上述公式中得到二次方程。我假设这只是我早已忘记的一些常见数学知识,但谷歌搜索“如何建立二次方程”也没有真正产生任何结果。
在继续之前,我真的很想了解如何到达这一步,因为我不喜欢编写我没有完全掌握的代码。