9

私はレイ トレーサーの計算を研究していますが、この件に関して読んだほぼすべての記事で行われている遷移に従っているわけではありません。これは私が持っているものです:

球の式:

(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

私はその時点まですべてをフォローしていますが(少なくとも私はそうしていると思います)、私が読んだすべてのチュートリアルは、それを説明せずにそこから2次方程式にジャンプします(これはサイトの1つからコピーされているため、用語は私の例とは少し異なります):

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 を解く方法を取得しますが、上記の式から二次方程式に到達する方法がわかりません。それは私が長い間忘れていた一般的な数学の知識の一部にすぎないと思いますが、「二次方程式の設定方法」をグーグルで調べても、実際には何も得られませんでした.

完全に理解できないコードを書くのは好きではないので、先に進む前にこのステップに到達する方法を理解したいと思っています。

4

2 に答える 2

17

各ステップの詳細なウォークスルーは次のとおりです。うまくいけば、これで物事が明確になるでしょう。3 次元球体の方程式は次のとおりです。

(x-a)^2 + (y-b)^2 + (z-c)^2 = r^2

球の<a, b, c>中心とrその半径です。<x, y, z>この式を満たす場合、点は球上にあります。

光線のパラメトリック方程式は次のとおりです。

  • X = xo + xd*t
  • Y = yo + yd*t
  • Z = zo + zd*t

<xo, yo, zo>光線の原点で、<xd,yd,yd>はカメラ光線の方向です。

交点を見つけるには、光線上のどの点が球上の点と同じかを確認する必要があります。そこで、光線の方程式を球の方程式に代入します。

(xo + xd*t - a)^2 + (yo + yd*t - b)^2 + (zo + zd*t - c)^2 = r^2

これは次のように展開されます。

  (xd^2 + yd^2 + zd^2)                              * t^2 +
  [2[xd * (xo - a) + yd * (yo - b) + zd *(zo - c)]] * t   +
  [(xo - a)^2 + (yo - b)^2 + (zo - c^)2 - r^2]      * 1
  = 0

これは、次の形式の二次方程式であることに注意してくださいAt^2 + Bt + C = 0

  • A = (xd^2 + yd^2 + zd^2)
  • B = [2[xd * (xo - a) + yd * (yo - b) + zd *(zo - c)]]
  • C = [(xo - a)^2 + (yo - b)^2 + (zo - c^)2 - r^2]

未知の変数に一般的な二次方程式を適用できます。これは次のとおりです。

t = [-B +- sqrt(B^2 - 4AC)] / 2A

そのB^2 - 4AC部分を「判別式」と呼びます。判別式の値に応じて、この方程式の解が 0 個、1 個、または 2 個得られます。

  • ゼロ未満の場合、解は虚数であり、光線と球は実平面で交差しません。

  • ゼロに等しい場合、光線は正確に 1 点で球体と交差します (球体に正確に接しています)。

  • ゼロより大きい場合、光線は正確に 2 点で球と交差します。

判別式が解がないことを示している場合は、完了です。光線は球と交差しません。判別式が少なくとも 1 つの解を示す場合、解tを求めて交点を決定できます。2 つの解決策は次のとおりです。

t_1 = [-B + sqrt(B^2 - 4AC)] / 2A
t_2 = [-B - sqrt(B^2 - 4AC)] / 2A

小さい方の解は、光線が最初に球体に当たる点です。

于 2009-12-31T18:04:00.247 に答える
8

ここから:

(X + DxT - Cx)^2 + (Y + DyT - Cy)^2 + (Z + DzT - Cz)^2 - R^2 = 0

3 つの二乗項を展開すると、長い式になります。

X^2 + Dx^2T^2 + Cx^2 + 2XDxT - 2XCx - 2DxTCx + ...... = 0

(これは式 を使用しているためです(x+y+z)^2 = x^2 + y^2 + z^2 + 2xy + 2xz + 2yz)

次に、T^2、T、および 1 の因数があるようにグループ化します。

(....)T^2 + (....)T + .... = 0

これらの要因は、上記の A、B、C です。これは T の二次方程式であり、二次公式を使用して解くことができます。

于 2009-12-31T17:53:21.923 に答える