私は C で Raytracer を書いており、球体を描画するためにデカルト方程式を使用しています。
x^2 + y^2 + z^2 = R^2.
目の位置 (x_eye、y_eye、z_eye) と目のベクトル (Vx、Vy、Vz) があります。私の線のパラメトリック方程式は次のとおりです。
x = x_eye + k * Vx
y = y_eye + k * Vy
z = z_eye + k * Vz
線のパラメトリック方程式を球のデカルト方程式に入れて、それを解きます
(x_eye + k * Vx)^2 + (y_eye + k * Vy)^2 + (z_eye + k * Vz)^2 = R^2
(Vx^2 + Vy^2 + Vz^2) * k^2 + 2 * (x_eye*Vx + y_eye*Vy + z_eye*Vz) * k + (x_eye^2 + y_eye^2 + z_eye^2 - R^2) = 0
ax^2 + bx + c = 0 のような式を取得し、a、b、c を次のように定義します。
a = (Vx^2 + Vy^2 + Vz^2) * k^2
b = 2 * (x_eye * Vx + y_eye * Vy + z_eye * Vz) * k
c = (x_eye^2 + y_eye^2 + z_eye^2 - R^2)
次に、交差がある場合、各ピクセルの k を見つけることができます (b^2 - 4.ac >= 0)。
しかし、これらの線と球線 のパラメトリック方程式を使用して k を見つける他の方法はありますか?
x = x_eye + k * Vx
y = y_eye + k * Vy
z = z_eye + k * Vz
球の場合:
x = R.cos(u).cos(v)
y = R.sin(u).cos(v)
z = R.sin(v)
これら2つのパラメトリック方程式でkを見つけるにはどうすればよいですか?
やるべきですか
x_eye + k * Vx = R.cos(u).cos(v)
y_eye + k * Vy = R.sin(u).cos(v)
z_eye + k * Vz = R.sin(v)