いろいろな形状の表面に点を一様分布させる

Last updated:

輻射による熱のやり取りを評価する場合,レイトレースすることで物体間のRadiative Coupling(または形態係数)を求めることが出来る. このとき光線は,物体の表面上で面積に関して一様になるように発生点を指定して,そこからランベルトの余弦則に沿うように光線の方向を決めてやる必要がある. 今回は基本的な表面形状(長方形・三角形・円板・球面・円柱・円錐・放物面)について,0–1の範囲のランダム値からどうやって一様分布を発生させるかを考える.

長方形

一様分布を考えるとき、もっともシンプルなケースは長方形だろう。 Figure 1のような長方形上に点を一様分布させる場合は,2つのランダム値(q1,q2)(q_1, q_2)を発生させて,以下のように計算すればよい. 平行四辺形の場合でも同様の方法が使える。

p=q1(p2p1)+q2(p3p1)\begin{equation} \vec{p} = q_1 (\vec{p_2} - \vec{p_1}) + q_2 (\vec{p_3} - \vec{p_1}) \end{equation}

point-distribution-1 Figure 1: Point Distribution on a Rectangle.

三角形

三角形上に点を一様分布させる場合、長方形と同様にEq. (1)を用いて計算することができる。 ただし、指定した点が三角形の外にある場合を除外するために、2つのランダム値(q1,q2)(q_1, q_2)の和が1以下である必要がある。 もし和が1を超えた場合は、その値を破棄し、有効な組み合わせが得られるまで新しいランダム値を生成する。

point-distribution-2 Figure 2: Point Distribution on a Triangle.

円柱側面

円柱側面上に点を一様分布させる場合は,高方向・周方向それぞれ一様に値をとればよい. 高さhhと周方向のパラメタφ\varphiは、ランダム値q1q_1q2q_2を用いてそれぞれ以下のように計算できる。

h=hmax q1\begin{gather} h = h_\mathrm{max} ~q_1 \end{gather} φ=(φendφstart) q2+φstart\begin{gather} \varphi = (\varphi_\mathrm{end} - \varphi_\mathrm{start})~ q_2 + \varphi_\mathrm{start} \end{gather}

point-distribution-3 Figure 3: Point Distribution on a Cylindrical Surface.

円板

部分円板上に点を一様にばらまく場合,ある点が半径方向の位置rrの内側に入る確率q1q_1は次のように表される.

q1=rinnerrθstartθendrdrdθrinnerrouterθstartθendrdrdθ=r2rinner2router2rinner2\begin{equation} q_1 = \frac{\int_{r_\mathrm{inner}}^{r} \int_{\theta_\mathrm{start}}^{\theta_\mathrm{end}} r dr d\theta}{\int_{r_\mathrm{inner}}^{r_\mathrm{outer}} \int_{\theta_\mathrm{start}}^{\theta_\mathrm{end}} r dr d\theta} = \frac{r^2 - r_\mathrm{inner}^2}{r_\mathrm{outer}^2 - r_\mathrm{inner}^2} \end{equation}

この式をrrについて解くと、ランダム値q1q_1に対して半径方向の位置rrを対応させることができる。

r=q1(router2rinner2)+rinner2\begin{equation} r = \sqrt{q_1 (r_\mathrm{outer}^2 - r_\mathrm{inner}^2) + r_\mathrm{inner}^2} \end{equation}

周方向については、ランダム値q2q_2を用いて以下のように指定できる。

θ=q2(θendθstart)+θstart\begin{equation} \theta = q_2 (\theta_\mathrm{end} - \theta_\mathrm{start}) + \theta_\mathrm{start} \end{equation}

point-distribution-4 Figure 4: Point Distribution on a Disk.

球面

部分球面上に一様に点をばらまく場合,ある点が緯度方向についてθ\theta以下である確率q1q_1は次のように表される.

q1=θapexθφstartφendsinθdφdθθapexθbaseφstartφendsinθdφdθ=[cosθ]θapexθ[cosθ]θapexθbase=cosθapexcosθcosθapexcosθbasewhereθbase=arccoshbaser,  θapex=arccoshapexr\begin{align} &q_1 = \frac{\int_{\theta_\mathrm{apex}}^{\theta} \int_{\varphi_\mathrm{start}}^{\varphi_\mathrm{end}} \sin \theta d\varphi d\theta}{\int_{\theta_\mathrm{apex}}^{\theta_\mathrm{base}} \int_{\varphi_\mathrm{start}}^{\varphi_\mathrm{end}} \sin \theta d\varphi d\theta } = \frac{[-\cos \theta]_{\theta_\mathrm{apex}}^{\theta}}{[-\cos \theta]_{\theta_\mathrm{apex}}^{\theta_\mathrm{base}}} = \frac{\cos \theta_\mathrm{apex}-\cos \theta}{\cos \theta_\mathrm{apex}-\cos \theta_\mathrm{base}} \\ &\mathrm{where}\quad \theta_\mathrm{base} = \arccos \frac{h_\mathrm{base}}{r}, ~~ \theta_\mathrm{apex} = \arccos \frac{h_\mathrm{apex}}{r} \notag \end{align}

この式をθ\thetaについて解くと、ランダム値q1q_1に対して緯度方向のパラメタθ\thetaを対応させることができる。

θ=arccos(cosθapexq1(cosθapexcosθbase))=arccos((1q1)hapexr+q1hbaser)\begin{align} \theta &= \arccos (\cos \theta_\mathrm{apex} - q_1(\cos \theta_\mathrm{apex}-\cos \theta_\mathrm{base})) \notag \\ &= \arccos\left( (1-q_1) \frac{h_\mathrm{apex}}{r} + q_1 \frac{h_\mathrm{base}}{r} \right) \end{align}

経度方向については、ランダム値q2q_2を用いて以下のように指定できる。

φ=q2(φendφstart)+φstart\begin{equation} \varphi = q_2 (\varphi_\mathrm{end} - \varphi_\mathrm{start}) + \varphi_\mathrm{start} \end{equation}

point-distribution-5 Figure 5: Point Distribution on a Spherical Surface.

円錐面

部分円錐面上に一様に点をばらまく場合,ある点が高さhh以下である確率q1q_1は次のように表される.

q1=0hφstartφend2πrcosθdφdh0hmaxφstartφend2πrcosθdφdh,wherer=r1tanθ h,tanθ=r1r2hmax=0hr1tanθ h dh0hmaxr1tanθh dh=[r1htanθ2h2]0h[r1htanθ2h2]0hmax=r1htanθ2h2r1hmaxtanθ2hmax2\begin{align} q_1 &= \frac{\int_{0}^{h} \int_{\varphi_\mathrm{start}}^{\varphi_\mathrm{end}} \frac{2\pi r}{\cos \theta}d\varphi dh}{\int^{h_\mathrm{max}}_{0} \int_{\varphi_\mathrm{start}}^{\varphi_\mathrm{end}} \frac{2\pi r}{\cos \theta}d\varphi dh}, \quad \mathrm{where}\quad r = r_1 - \tan \theta ~h, \quad \tan \theta = \frac{r_1 - r_2}{h_\mathrm{max}} \notag \\ &= \frac{\int_{0}^{h} r_1 - \tan \theta~ h ~ dh}{\int^{h_\mathrm{max}}_{0} r_1 - \tan \theta h ~ dh} = \frac{\left[r_1 h - \frac{\tan \theta}{2}h^2 \right]^h_0}{\left[r_1 h - \frac{\tan \theta}{2}h^2 \right]^{h_\mathrm{max}}_0} = \frac{r_1 h - \frac{\tan \theta}{2}h^2}{r_1 h_\mathrm{max} - \frac{\tan \theta}{2}h^2_\mathrm{max}} \end{align}

この式をhhについて解くと、ランダム値q1q_1に対して高さhhを対応させることができる。 このとき、2つ解が存在するが、高さhhが円錐の頂点を超えないようにしたいので、マイナスの場合を用いる。

h=r1tanθ±(r1tanθ)22q1hmaxr1tanθ+q1hmax2\begin{equation} h = \frac{r_1}{\tan \theta} \pm \sqrt{\left( \frac{r_1}{\tan \theta} \right)^2 - 2q_1 h_\mathrm{max} \frac{r_1}{\tan \theta} + q_1 h_\mathrm{max}^2} \end{equation}

周方向については、ランダム値q2q_2を用いて以下のように指定できる。

φ=q2(φendφstart)+φstart\begin{equation} \varphi = q_2 (\varphi_\mathrm{end} - \varphi_\mathrm{start}) + \varphi_\mathrm{start} \end{equation}

point-distribution-6 Figure 6: Point Distribution on a Cone.

放物面

Figure 7のような部分放物面について考えよう。ただし、放物面の頂点は原点にあり,放物面の軸が高さ方向の軸に一致するものとする.

point-distribution-7 Figure 7: Point Distribution on a Parabolic Surface.

半径rrと高さhhの関係は次のように表される。

h=a2r2,  where  a2=hmaxrmax2\begin{equation} h = a^2 r^2, ~~\mathrm{where} ~~ a^2 = \frac{h_\mathrm{max}}{r_\mathrm{max}^2} \end{equation} r=ha\begin{equation} r = \frac{\sqrt{h}}{a} \end{equation}

接線の傾きをtanθ\tan\thetaとすると、次のように表される。

tanθ=dhdr=2a2r\begin{equation} \tan{\theta} = \frac{dh}{dr} = 2a^2 r \end{equation}

ここで、1+1tan2θ=1sin2θ1+\frac{1}{\tan^2 \theta} = \frac{1}{\sin^2 \theta}を用いると、以下の関係が得られる。

1sinθ=1+1tan2θ=1+14a4r2rsinθ=ha2+h4a6r2=ha2+14a4\begin{gather} \frac{1}{\sin \theta} = \sqrt{1 + \frac{1}{\tan^2 \theta}} = \sqrt{1 + \frac{1}{4a^4r^2}} \\ \frac{r}{\sin \theta} = \sqrt{\frac{h}{a^2} + \frac{h}{4a^6r^2}} = \sqrt{\frac{h}{a^2} + \frac{1}{4a^4}} \end{gather}

さて、この部分放物面上に点を一様にばらまく場合、ある点が高さhh以下である確率q1q_1は次のように表される。

q1=hminhφstartφendrsinθdφdhhminhmaxφstartφendrsinθdφdh=hminhh+14a2dhhminhmaxh+14a2dh=[23(h+14a2)32]hminh[23(h+14a2)32]hminhmax=(h+14a2)32(hmin+14a2)32(hmax+14a2)32(hmin+14a2)32\begin{align} q_1 &= \frac{\int_{h_\mathrm{min}}^{h} \int_{\varphi_\mathrm{start}}^{\varphi_\mathrm{end}} \frac{r}{\sin \theta}d\varphi dh}{\int^{h_\mathrm{max}}_{h_\mathrm{min}} \int_{\varphi_\mathrm{start}}^{\varphi_\mathrm{end}} \frac{r}{\sin \theta}d\varphi dh} = \frac{\int_{h_\mathrm{min}}^{h} \sqrt{h + \frac{1}{4a^2}} dh}{\int^{h_\mathrm{max}}_{h_\mathrm{min}} \sqrt{h + \frac{1}{4a^2}} dh} \notag \\ &= \frac{\left[ \frac{2}{3}\left(h + \frac{1}{4a^2} \right)^{\frac{3}{2}} \right]^h_{h_\mathrm{min}}}{\left[ \frac{2}{3} \left(h + \frac{1}{4a^2} \right)^{\frac{3}{2}} \right]^{h_\mathrm{max}}_{h_\mathrm{min}}} = \frac{\left(h + \frac{1}{4a^2} \right)^{\frac{3}{2}} - \left(h_\mathrm{min} + \frac{1}{4a^2} \right)^{\frac{3}{2}}}{\left(h_\mathrm{max} + \frac{1}{4a^2} \right)^{\frac{3}{2}} - \left(h_\mathrm{min} + \frac{1}{4a^2} \right)^{\frac{3}{2}}} \end{align}

この式をhhについて解くと、ランダム値q1q_1に対して高さhhを対応させることができる。

(h+14a2)32=q1{(hmax+14a2)32(hmin+14a2)32}+(hmin+14a2)32h=[q1{(hmax+14a2)32(hmin+14a2)32}+(hmin+14a2)32]2314a2\begin{gather} \left(h + \frac{1}{4a^2} \right)^{\frac{3}{2}} = q_1 \left\{ \left(h_\mathrm{max} + \frac{1}{4a^2} \right)^{\frac{3}{2}} - \left(h_\mathrm{min} + \frac{1}{4a^2} \right)^{\frac{3}{2}} \right\} + \left(h_\mathrm{min} + \frac{1}{4a^2} \right)^\frac{3}{2} \\ h = \left[q_1 \left\{ \left(h_\mathrm{max} + \frac{1}{4a^2} \right)^{\frac{3}{2}} - \left(h_\mathrm{min} + \frac{1}{4a^2} \right)^{\frac{3}{2}} \right\} + \left(h_\mathrm{min} + \frac{1}{4a^2} \right)^\frac{3}{2} \right]^\frac{2}{3} - \frac{1}{4a^2} \end{gather}

周方向については、ランダム値q2q_2を用いて以下のように指定できる。

φ=q2(φendφstart)+φstart\begin{equation} \varphi = q_2 (\varphi_\mathrm{end} - \varphi_\mathrm{start}) + \varphi_\mathrm{start} \end{equation}

関連記事

バイメタル変形の解析解

材質の異なる薄板を張り合わせると、常温では平らだったものが、温度を変化させると“そり”が生じてしまうことがあります。これは各材質が異なる熱膨張率を持っていることに起因する変形で、このような材料をバイメタルと呼びます。

浮動小数点数の丸め誤差と誤差伝搬

浮動小数点数を使った数値計算では、必ず丸め誤差が発生します。特に複数回演算操作を行った後、誤差がどう伝搬するかはそれほど明らかではありません。この記事では、IEEE 754-2019をもとに浮動小数点数の定義を確認し、誤差推定の基本的な方法について議論します。