使用M-Reps进行光线跟踪

2022-02-14 17:49:54

去年';在s SGP会议上,研究人员提出了一种有趣的NURBS曲面网格划分方法。这激发了我的兴趣,因为那年早些时候我写过aNURBS mesher(作为STEP文件查看器Foxtrot的一部分)。

在一次长途火车旅行中,我花了一些时间试图理解这篇论文。我很快意识到我';d需要向上游发展:the Urbs meshing paper是一系列相关论文中的最新一篇,在几何基础设施方面严重依赖于之前的工作。

今年,作为我传统寒假图形黑客大赛的一部分,我深入阅读了前三篇论文。最后,我可以成功地直接从Bézier贴片中对犹他茶壶进行光线追踪:

我在Twitter上发表了连续评论;这篇文章更深入,应该对其他寻求理解这一研究领域的人有所帮助。

这些论文描述了一种将参数曲线和曲面转换为函数的方法,该函数将点$(x,y,z)$转换为矩阵$M(x,y,z)$。

这个矩阵有一个有趣的特性:当你';我们正处在曲线或曲面上!

通过一个神秘的过程(稍后解释),我们可以计算出$M$矩阵。他们';你不是特别漂亮:

利用这些矩阵,我们可以计算$M(3,3)$,它应该在曲线上,然后查看其奇异值(使用SVD):

这似乎有效:最后一个奇异值非常接近于零。为确认,我们';我来检查一点';这太离谱了:

在这种情况下,奇异值都是非零的,这意味着矩阵具有满秩。这就是我们对';它不在曲线上!

记住我们';重新处理参数化曲线和曲面。在一般情况下,我们';重新获取一些参数$s$(其中$s$对于曲线是一维的,$s=(s_1,s_2)$对于曲面),并生成有理曲线或曲面

在上面的例子中,我们';重新生成二维贝塞尔曲线,这意味着我们有一个一维参数化,$f_0(s)=1$和$f_3(s)=0$。

目前,$g_i(s)$函数定义不足;我们没有';我不知道它们是什么,只是上面的属性对于给定的$f_i(s)$函数集必须成立。

现在,让';s使用$g_i(s)$函数来构建一个新函数,该函数由$s$参数化,并在空间$\left(x,y,z\right)的某个点上求值$

同样,$L$不是一个特定的函数;它';这只是组合一组$g_i(s)$函数的一种特殊方式。然而,它已经有了一个有趣的特性:如果我们在曲线或曲面上的某个点对它求值,会发生什么?

$$\begin{aligned}L\ left(s;\frac{f_1(s)}{f_0(s)}、\frac{f_2(s)}{f_0(s)}、\frac{f_3(s)}{f_0(s)}\ right)&;=g_0(s)+\frac{f_1(s)}{f_0(s)}g_1(s)+\frac{f_2(s)}{f_0(s)}g_2(s)+\frac{f_3(s)}{f_0(s)}g_3(s)\\&;=\frac{g_0(s)f_0(s)+f_1(s)g_1(s)+f_2(s)g_2(s)+f_3(s)g_3(s)}{f_0(s)\\\\&;=\frac{0}{f_0(s)\\\\&;=0\end{aligned}$$

那';s整齐:$L(s;x,y,z)$s$在曲面上给定的点上为0!

本文通过指出oncewe';我们为$s$锁定了一个特定值,$L_s(x,y,z)$在3D中定义了一个平面。根据我们上面的观察,那架飞机必须通过表面上由$s$给出的点。

让';让我们简单地向前跳,以便用一幅画打破数学之墙。在我们的Bézier曲线示例中,我们最终得到了三个$L(s;x,y)$函数,每个函数在2D中定义一条线,具体值为$s$。这里';当你扫掠曲线参数$s$的值时,曲线上的点显示为黑点,它们看起来是什么样子:

这三条线总是在特定的$s$给定的曲线上相交!

好了,回到数学上来!我们';我们讨论了一组四个函数$g_{0,1,2,3}(s)$,然后给定一个特定的属性,并将它们组合成一个新函数$L(s;x,y,z)$。

考虑一组基函数$\Lead(\psii1(s),\psisi2(s),…\psi_{m_\nu}(s)\right)$,其中$m_\nu$是阶$\leq\nu$的基函数数,$\nu$是任意选择的阶。

因为所有的$g_i(s)$函数都使用相同的基函数,所以我们可以将它们的组合表示为

(你知道$\Lambda$是大写的$\Lambda$吗?我直到刚才才知道;我对它完全是希腊语!)

现在,我们可以重写之前的函数:$$L(s;x,y,z)=\sum_{i=1}^{m_{nu}\Lambda_i(x,y,z)\psi_i(s)$$

出于很快就会明白的原因,我们也可以将其写成asa矩阵乘法(尽管它是一行乘以一列):

$$\left[\begin{array}{cccc}\psi_1(s)&;\psi_2(s)&;\psi{m\uNu}(s)\ end{array}\right]\left[\begin array}{c}\Lambda_1(x,y,z)\\\Lambda_2(x,y,z)\\\\\\\\\da_{m\nu nu x,y,z)\\\end{array{c}\Lambda{1(x,y,y,z)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$$

让';让我们后退一步:我们';我们假设存在四个函数$g_{0,1,2,3}(s)$,赋予它们某些属性,并在它们之上构建了这个基础设施。

然而,我们没有';他们没有受到足够的约束,以致于';对于给定的形状,只有一组$g$函数。您可以想象生成$g$函数的多个集,例如。

在这里,我们';重新生成$g$函数的$r\nu$集,$r\nu$是另一个神秘值,我们';我稍后再解释。

现在我们';我们有多组$g$函数,我们可以使用基础设施的其余部分,构建一个由$\Lambda$值组成的大型矩阵。简而言之,让';让我们把它叫做$M(x,y,z)$:

10.0元(x,y,y,z)M(x,y,y,z)M(x,y,y,z)M(x,y,y,z)及另外两名(x,y,y,y,y,y,y,z)M(x,y,y,z)M(x,y,y,z)M(x,y,y,y,z)及其他[3.0(x,y,y,y,y,y,y,y,z)及及amp amp;及..................................................................................................................amp;\\\ Lambda_{M_\nu,1}(x,y,z)&;\Lambda_{M_\nu,2}(x,y,z)&;\Lambda_{M_\nu,r\nu}(x,y,z)\\\end{array}\right]$$

但是等等!那';这是一个令人困惑的变量选择,因为我们使用了$M$asour";具有降秩性质的魔矩阵#34;早期的。

让';让我们看看原因。如前所述,我们可以乘以$g$的基函数,生成一系列函数$L(s;x,y,z)$:

$$\begin{aligned}&;\左[\begin{array}{cccc}\psi{U 1(s)..\psi{m\UNU}(s)\end{array}\right]m(x,y,z)\\=&;\从左到左,从左到左,从从左到左,从从从开始{{{阵列阵列{{{{{{{{{{{数组}{{{{{数组}}{{CCCCCCCCCCCCCC}{{CCCCCCCCCC}{{{CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC1\PS1(s)及其他地区)及其他地区的人士及其他地区可能可能会从1,1,1.1(x,y,y,y,y,z)及及另外另外另外两两个城市,1、1、1、1、3、2、3、3、3、3、2、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3)及}(x,y,z)\\\end{array}\right]\\=&;\左[\begin{array}{ccc}L_1(s;x,y,z)&;L{m_\nu}(s;x,y,z)\end{array}\right]\end{aligned}$$

现在我们可以看到排名下降的原因了。考虑在参数$S$给出的表面上点$M$:

$$\begin{aligned}&;\左[\begin{array}{cccc}\psi{1(s)\[0(s)0(s)0(s)0(s)0(s)0(s)0(s)0(s)0(s)0(s)0(s)3(s)0(s)0(s)0(s)0(s)0(s)0(s)0(s)0(s)0(s)0(s)0)0(s)0)0(s)0(s)0)0(s)0(s)0)0(s)0(s)0)0(s)0(s)0(s)0)0(s)0(s)0)0(s)0(s)0)0(s)0(s)0)0(s)0(s)0(s)0(s)0(s)0(s)0(s)0(s)0)0(s)0(s)0(s)0)0(s)0(s)0)0(s)0(s)0)0)f_0(s)})\end{array}\right]\\&;=\左[\begin{array}{ccc}0&;..&;0\end{array}\right]\end{aligned}$$

您可以将此乘法视为构建矩阵行的线性组合,权重为$\psi_1(s)。。。\psi_{m_u\nu}(s)$。

它';有一个简单的矩阵行的线性组合求和为零,因为我们刚刚找到了它。

这种组合的存在意味着这些行不是';t线性独立,表示矩阵的秩为';我没吃饱!

(这个解释有点牵强,因为它也依赖于$m_nu$和$r_nu$,但这至少是正确的直觉;详细信息请参见本文第3.2节)

在这一点上,我们有一个方法来为给定的曲线或曲面构建有用的矩阵$M(x,y,z)$,由

当然,这是其中之一#34;现在你有两个问题#34;情境:我们到底要如何找到这些$g$函数集?

这取决于你是什么样的模特';重新处理,并提出几种常见几何表示的策略。让';第2.1节介绍了如何解决有理Bézier曲线的问题。

对于Bézier曲线,$f$将使用Bernstein多项式作为其基函数;我们';我宣布$g$也会这么做。

有$d+1$Bernstein多项式,阶数为$d$,编号为$0$到$d$。i$和#39美元;$d$次的th Bernstein多项式有一个等式

在这一点上,我们知道权重的值在$f_{0,1,2,3}(s)$,因为';这是我们的曲线,但我们没有';我不知道$\lambda_{…}$重量为$g$。

想了解伯恩斯坦多项式的一个很酷的事实吗?如果将它们相乘,结果将是一个阶数为'的缩放伯恩斯坦多项式;其他两个度数之和。

$$\begin{aligned}B^d_i(s)B^\nu_j(s)&;={d\choose i}t^i(1-t)^{d-i}{\nu\choose j}t^j(1-t)^{\nu-j}\\\&;={d\choose i}{\nu\choose j}t^{i+j}(1-t)^{d+\nu-(i+j)}\\\&;={d\choose i}{\nu\choose j}\frac{B^{d+\nu}{i+j}(s)}{{d+\nu}\choose{i+j}\end{aligned}$$

这意味着,因为$f(s)$是从$B^d(s)$构建的,$g(s)$是从$B^\nu(s)$构建的,所以他们的产品$f(s)g(s)$可以用$B^{d+\nu}(s)$表示。

现在,我们';我们要做很多数学题。考虑把我们的F($)$函数中的一个乘以$b^ \nu$:

$$B_j^\nu(s)f_0(s)=\sum_{i=0}^d w{0,i}{d\choose i}{\nu\choose j}\frac{B^{d+\nu}{i+j}(s)}{{d+\nu}\choose{i+j}$$

$$B_j^\nu(s)f_0(s)=\sum_{i=0}^d W_0(i,j)B ^{d+\nu}{i+j}$$我们可以将其改写为非常尴尬的矩阵乘法:

$$B_j^\nu(s)f_0(s)=\left[\begin{array}{cccc}B_j^{d+\nu}(s)和B_{j+1}{d+\nu}(s)和B_{j+d}{d+\nu end{array}\right]\_left[\begin array{c}W}0,W}0,W}0,W}$$

为了使所有$j$的行矩阵保持不变,我们';我想把它做成长度为$d+\nu$。这意味着我们';我需要用零填充列向量:

$$\begin{aligned}B_0^\nu(s)f_0(s)&;=\左(左)及左(右)左(左)及左(左)及左(左)及左(左)左(左)及左(左)左(左)及左(左)左(左)及及及及及左(左)及及及及及左(左)两两两名香港及及及及及两两两两名香港及及及香港(香港)香港及香港及香港(香港)香港及香港及香港及香港及香港(香港)香港及香港及香港及香港及香港(香港及香港及香港及香港(香港)的)香港及香港(香港及香港及香港及香港及香港及香港(香港)的)的)香港及香港及香港及香港(香港及香港及香港及香港及香港的)的)的))香港及香港及香港(区区区区区区区区区区(香港及香港及及香港的)的)的)的香港及香港(香港及香港及香港及香港及香港及香港(香港及香港及香港的)的)的)的)的)的(s)fu 0(s)\左[\begin{array}{cccc}bU0^{d+\nu}(s)和bU1}{d+\nu}(s)..和bU0{d+\nu}(s)\{d+\nu}(s)\ end{array}\right]\左[\begin array}{c}0\\W{0(0,1)\\\\ W{0(1,1)\\\\\\\ W\\\\\\\\\\ n数组右端{。。。等等,从$B_2^\nu(s)f_0(s)$到$B_\nu^\nu(s)f_0(s)$。

现在,让';让我们为0到$\nu$之间的所有$j$值建立这样一个矩阵,我们';我将调用$\mathbb{S}{0,\nu}$:

香港警方(0、0)及0&0及0及0及0及0及0& amp amp;amp;0(1、0)及0及0及0及0及0及0及0及0及0及0...香港警方(1、0)0(1、0)及W(0(1、0、0、0、1)及0(0、1)及0(0、1)及0)及0(0、1)及0)及0(0)及0(0、0、1)及0)及0)及0(0(0、0、1)及0)及0(0、1)及0)及0(0(0、1、1、1)及0)及0(0)及0)及0)及0)及0(0(0)及0(0(0(0、1、1、1、1、1)及0)及0)及0)及0(0(0(0(0、0)及0)及0)及{array}\right]$$

$$\begin{aligned}&;\左[\begin{array}{cccc}B_0^{d+\nu}(s)和B_{1}{d+\nu}(s)和..和B_{j+i}^{d+\nu}(s)\end{array}\right]\_mathbb{s}{0\nu=\左[\begin{array}{ccccccc}B{0}nu(s)f{0}(s)和B{1}nu(s)f{0}(s)和B{2}nu(s)f{0}(s)和B{2}(s)nu(s)f{0}(s)=左[\begin{array}{ccccccc}B{0}^\nu(s)&;B{1}^\nu(s)&;B{2}^\nu(s)&;B{nu^\nu(s)\ end{array}\right]\_end{aligned}$$

$$\begin{aligned}&;(s)及(s)及(s)及(2)两名(s)及(2)两名(s)及(2)两名(s)及(2)两名(s)及(2)两名(s)及及(2)两名(s)及(s)及及(s)及及及(及)两名(s)及及及及及及及(两名)两名(s)数组)布布布布数组{{{{{{{{{{{香港香港香港香港香港及及香港香港)布布布布布数组}{{{{{{{{{{{{{{{香港香港香港香港香港香港香港香港香港)香港香港香港香港香港香港香港香港(香港)及及香港)布布布布{{{{{{{{{{{{{香港)香港香港香港香港)香港香港香港香港香港香港香港香港香港))布布{{{{{{{{{{{{{{{{香港香港香港香港香港香港香港\right]\\&;=f_0(s)\left(B_{0}^\nu(s)\lambda_{0,0}+B_{1}^\nu(s)\lambda_{0,1}+…+B_u\nu^\nu(s)\lambda_{0\nu}\right)\\&;=f_0(s)g_0(s)\end{aligned}$$

因此,仅从$f_0(s)$和最大度$\nu$的权重,我们构建了一个矩阵$\mathbb{s}{0,\nu}$,其属性为

[左$$$$$$$\左[\左[\be记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记lambda_{0,1}\\\ lambda_{0,2}\\\\\ lambda_{0\nu}\\\ end{array}\ right]=f_0(s)g_0(s)$$

注意$\mathbb{S}{0、\nu}$isn';t参数化为$s$,它';这只是一个常量数组!这意味着如果我们能找到一个向量';在$\mathbb{s}{u{0,nu}$的空空间中,术语$\lambda_{0,0}、\lambda_{0,1}。。。\所述向量的lambda_{0,\nu}$定义了一个$g_0(s)$,其中$f_0(s)g_0(s)=0$,而对$s$一无所知!

(用你最喜欢的线性代数软件包很容易找到矩阵的零空间,所以只需假设';s微不足道)

现在我们';我们接近目标了。同样,我们可以基于原始曲线中的$f{1-3}(S)$构建$\mathbb{S}{1、\nu}$到$\mathbb{S}{3、\nu}$,然后将它们排列成一个矩阵';s$4 \乘以$的宽度$\mathbb{s}{0\nu}$。让';只需$\mathbb{S}\uNu$即可缩放此新矩阵:

$$\mathbb{S}\uNu=\big[\begin{array}{c | c | c | c}\mathbb{S}{u0\nu}&;\mathbb{S}{1\nu}&;\mathb{S}{2\nu$$

2007年10月10日(左)及2007年10月1日(左)及10月1日(左)左(左)上周(左)上周(左)上周(左)上周(左)上周[[[[be开始{{{数组数组}{{{数组}{{{CCCCCCCC{0}}{{{{{亚洲亚洲数组}{{{{{0}{{{0 0 0 0}{香港(s)及香港(s)及香港)及香港及香港(数组}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{亚洲亚洲地区)数组}}}(s))))及亚洲亚洲(s)及亚洲(s))及香港)及香港)数组)及香港)及香港)及香港)及及香港及香港及及香港及香港及香港及香港及及及及及及香港{{{{{{{{\mathbb{s}{u2\nu}&;\mathbb{s}{u3\nu}\end{array}\big]\left[\begin{array}{c}\lambda{0,0}\\\\ lambda{0,1}\\\\\\ lambda{0,1}\\\\\\ lambda{0\nu\\\hline\lambda{1,0}\\\\\\\lambda_{1,nu}\\\ hline\lambda_{2,0}\\\\\\lambda_{2,nu}\\\ hline\lambda_{3,0}\\\\\\lambda_{3,\nu}\\\ end{array}\右]$$

请注意,由于$\mathbb{S}$的宽度是4倍,所以列向量高了4倍,并且每个$g$函数都包含$\lambda$系数。

$$\begin{aligned}&;\从左[be开始{{{{{数组数组}{{{{{{{{{{{{{{门阵列}{{{{{{{{{{{{{{{{{{{{{{数组}{{{{门阵列}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}(s)学校学校学校)及及香港及及及及及及及及及香港香港香港及及及及及及香港香港香港香港的{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}{{{{{{{左[\begin{array}{c}\lambda{0,0}\\\ lambda{0,1}\\\\\\\ lambda{0,1}\\\\\\\\ lambda{0,nu}\\\hline\lambda{1,0}\\\\\\\lambda_{1,nu}\\\ hline\lambda_{2,0}\\\\\\lambda_{2,nu}\\\ hline\lambda_{3,0}\\\\\\lambda_{3,\nu}\\\ end{array}\ right]\\=&;\左左{{开始{{{{数组数组}{{{{{{{{{{{门门阵列}{{{{{{{{{{{{门门阵列}{{{{{{{门阵列}{{{{门阵列}{{{{门阵列}{{{门阵列}{{{门门阵列}香港香港及香港{{{门阵列}{{{{{{0}及香港及香港及香港及香港及香港及香港{{{{{门阵列阵列}及香港及香港及香港及香港及香港及香港及香港\\{{{{{{{{{{门门阵列阵列阵列阵列}}}{{{{{门阵列}及香港及香港及香港及香港及香港及香港及香港及香港及香港及香港及香港及香港及香港及香港及香港\\\\\\{array}\right]\left[\begin{array}{c}\lambda{0,0}\\\\\\\\\lambda{0,nu}\\\\hline\lambda{1,0}\\\\\\\\\lambda{1,0}\\\\\\\\lambda{1,nu\\\hline\\\lambda_{2,\nu}\\\\hline\\\lambda_{3,\nu}\\\ end{array}\ right]\\=&;\hspace{0.1in}f_0(s)g_0(s)+f_1(s)g_1(s)+f_2(s)g_2(s)+f_3(s)g_3(s)\end{aligned}$$

(在中间的表达式中,$B$和$f$仍然是$s$的函数,但我在一行中没有空间容纳$(s)$)

好吧,你看看!结果与本节开头的表达式相同,我们需要为零!

这意味着,通过计算$\mathbb{S}\uNu$的零空间,我们可以找到系数$\lambda{0,0},。。。\lambda{3,\nu}$它让我们构造$g{0-3}(s)$,这样

$\mathbb{S}\uNu$中的空空间可能包含多个向量,这让我们可以找到多组$g$函数。这反过来告诉我们如何找到$r\uNu$,这是我们矩阵中的列数$M(x,y,z)$:$r\uNu$是$\mathb{S}\uNu$的空值。

根据这些$g$函数的系数,我们使用现有的基础设施来构建所需的矩阵$M(x,y,z)$;记住,矩阵的项由

10.0.1(x,y,y,z)及另外两名(x,y,y,z)及另外两名(0,2)(x,y,y,z)及两名(x,y,y,y,z)及另外两名(x,y,y,z)及另外两名(x,y,z)及另外两名(x,y,y,z)及另两名(x,y,y,y,y,z)及另外两名(x,y,y,y,y,y,z)及及另外两名及另外两名及另外两名及另外两名及另外两名....另外两名(0,或两名(0,0,0,0,0,0,r,r,r,或(x,x,y,y,y,y,y,y,y,x,x,y,y,y,y,y,x,y,x,y,y,y,y,x,y,y,y,y amp;\\\\ Lambda_{d,1}(x,y,z)&;\Lambda_{d,2}(x,y,z)&;\Lambda_{d,r_\nu}(x,y,z)\\\end{array}\right]$$

其中,每列表示一组特定的$g$函数,即$\mathbb{S}\uUnu$'中的单个向量;s空空间。

如果曲线或曲面上有一个点,我们如何计算它对应的$s$参数?

这意味着,$\left[\begin{array}{cccc}\psi{1(s)&&;\psi{m{u\nu}(s)\end{array}\right]^T$在$m\left(\frac{f{u1(s)}{f_0(s)}、\frac{f_2(s)}{f_0(s)}、\frac{f_3(s){$

这很有帮助,因为我们可以使用前面提到的线性代数包中的标准函数来计算零空间。

从空空间到$s$取决于基本函数$\psi_i(s)$的确切形式。在我们的例子中,他们';关于伯恩斯坦多项式。

$$\left[\begin{array}{c}\psi{U1(s)\\\psi{U2(s)\\\\psi{Um\Unu}(s)\\ end{array}\right]=\left[\begin{array}{c}B{0^\nu s)\\B{U1^\nu$$

$$\begin{aligned}\frac{\psi_2(s)}{\psi_1(s)}&;=\frac{B_1^\nu(s)}{B_0^\nu(s)}\\\\&;=\frac{\nu\choose 1}s^1(1-s)^{\nu-1}{{\nu\choose 0}s^0(1-s)^{\nu}\\\&;=\frac{\frac{\nu!}{1!(\nu-1)!}s^1(1-s)^{\nu-1}{\frac{\nu!}{0!(\nu-0)!}s^0(1-s)^{\nu}\\\\&;=\frac{\nu s(1-s)^{\nu-1}{(1-s)^{\nu}\\\&;=\frac{\nu s}{(1-s)}\end{aligned}$$

换句话说,给定零向量中前两项的比率,我们可以用简单代数计算$s$!

如果射线在病理上接近表面或有多个交叉点,则情况更复杂;后来的一篇论文是针对这些案例的策略(第2.4节),但我没有';不要潜入其中。

记住,最终目标是直接使用matrixrepresentation进行光线跟踪。射线可以定义为

$$R(t)=O+tD$$,其中原点$O=(x_0,y_0,z_0)$,方向$D=(D_x,D_y,D_z)$,而$t$是沿射线移动的距离。

我们可以将其插入$M(x,y,z)$并构建$M(t)$,即M-rep矩阵距离$t$。因为$M(x,y,z)$和$R(t)$都是线性的,所以设';让我们宣布

$$M(t)=A-tB$$其中$A=M(x_0,y_0,z_0)$和$B=M(x_0+d_x,y_0+d_y,z_0+d_z)$。

和普通矩阵一样,方阵铅笔也有特征值和特征向量;找到它们被称为广义特征值问题

根据定义,在特征值为$t_e$时,则$\det(A-t_eB)=0$。请注意,这意味着矩阵束在$O+t_eD$位置没有满秩,因此这是一个光线曲面交点!

不幸的是,你只能找到方阵铅笔的特征值,而我们的$a$和$B$可能不是正方形!

论文中有一个将矩形矩阵铅笔缩减为正方形的策略,该策略在第三篇论文的第2.3节中给出。它';这是一种迭代算法,它反复收缩矩阵,直到$B$矩阵达到满秩。链接的文章解释得很清楚,我不知道';我不需要拆开它,尽管我不知道它为什么会工作。

我们提到有几种方法可以选择$m$squaresub铅笔$a− tB$,其中之一是计算铅笔的列缩减,然后保留枢轴列。

这对作者来说可能是显而易见的,但作为一个不';不要为早餐争论矩阵,这是相当神秘的。在我的光线追踪实验中,我从未遇到过这种失败模式,所以我没有';Don't down the rabbit h

......