Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Raupのモデル

Raupのモデル

数らせんは様々な巻きパタンを記述でき,多くの平巻の殻の近似に有用である. しかし,太さを持った管(螺管)が3 次元的に巻いている実際の貝殻を記述するにはいささか表現力が足りない. 理論形態学が創始される契機となったRaup のモデル(Raup’smodel; )を見てみよう.

Raup のモデルのコンセプトは「母曲線と呼ばれる殻口形状を近似する閉曲線」が「巻軸を中心に回転しながら成長,転移することで螺管を近似」する,である. Raup のモデルでは4つのパラメータ,巻軸周りの母曲線一回転あたりの螺層拡大率WRW_R,巻軸方向への転移率TRT_R,巻軸からの相対的な臍サイズDRD_R,殻口のアスペクト比SRS_R,でこれらの性質を指定する. これらのパラメータは2次元的な非破壊計測により推定することが比較的容易であり,実証研究に頻繁に用いられる要因の一つとなっている.

ここでは,Raup のモデルを以下のように定義しよう(いくつか異なる定義がある).

uR(θ,ϕ)=r0WRθ/2Rz(θ)[(cosϕ01SRsinϕ)+(2DR1DR+102TR(DR1DR+1))]\mathbf{u}_\mathrm{R}(\theta, \phi) = r_0 W_\mathrm{R}^{\theta/2} \mathbf{R}_z(\theta) \left[ \begin{pmatrix} \cos\phi\\ 0\\ \frac{1}{S_\mathrm{R}}\sin\phi \end{pmatrix} +\begin{pmatrix} \frac{2 D_\mathrm{R}}{1-D_\mathrm{R}}+1\\ 0\\ 2T_\mathrm{R} \left(\frac{D_\mathrm{R}}{1-D_\mathrm{R}}+1\right) \end{pmatrix}\\ \right]

θ\thetaは母曲線が巻軸周りに回転した角度,ϕ\phiは殻口位置を指定するパラメータ,uR(θ,ϕ)\mathbf{u}_R(\theta,\phi)θ\thetaϕ\phiをパラメータとするパラメトリックな曲面であり,殻表面の位置ベクトルとなっている.

Rz(θ)\mathbf{R}_z (\theta)zz 軸回りのθ\theta回転を表す回転行列

Rz(θ)=(cosθsinθ0sinθcosθ0001)\mathbf{R}_z(\theta) = \begin{pmatrix} \cos\theta & -\sin\theta & 0\\ \sin\theta & \cos\theta & 0\\ 0 & 0 & 1 \end{pmatrix}

を表す.

Raupのモデルと三次元の可視化

Raup のモデルのパラメータを変化させることで多様な殻形態を描くことができる. ここでは,SR=1S_R = 1と固定(殻口が円)と仮定し,以下のシンプルなケースで様々な殻形態を描いてみよう.

(1)を整理すると,以下のようになる.

uR(θ,ϕ)=(WRθ2π(2DR1DR+1+cosϕ)cosθWRθ2π(2DR1DR+1+cosϕ)sinθWRθ2π(2TR(DR1D+1)+sinϕ))\mathbf{u}_\mathrm{R}(\theta, \phi)= \begin{pmatrix} W_R^{\frac{\theta}{2 \pi}} \left(\frac{2 D_R}{1 - D_R} + 1 + \cos \phi \right) \cos \theta \\ W_R^{\frac{\theta}{2 \pi}} \left(\frac{2 D_R}{1 - D_R} + 1 + \cos \phi \right) \sin \theta \\ W_R^{\frac{\theta}{2 \pi}} \left(2 T_R \left(\frac{D_R}{1 - D} + 1\right) + \sin \phi \right) \end{pmatrix}

効率的な貝殻形態の計算のためにNumPyを利用する.

import numpy as np
import matplotlib.pyplot as plt
# Raupのモデル
def raup_model(W, T, D, theta, phi):
    """Raupのモデル

    Raupのモデルに基づき殻表面の座標(x, y, z)を計算する.

    Args:
        W: 螺層拡大率
        T: 転移率(殻の高さ)
        D: 巻軸からの相対的距離(臍の大きさ)
        theta: 成長に伴う回転角
        phi: 殻口に沿った回転角

    Returns:
        x, y, z: 殻表面のx座標,y座標,z座標の
        それぞれの座標値(の配列)

    """
    w = W ** (theta / (2 * np.pi))
    x = w * (2 * D / (1 - D) + 1 + np.cos(phi)) * np.cos(theta)
    y = -w * (2 * D / (1 - D) + 1 + np.cos(phi)) * np.sin(theta)
    z = -w * (2 * T * (D / (1 - D) + 1) + np.sin(phi))
    return (x, y, z)

プロット時に見やすくするためにx軸周りで180°回転させている(y,zの符号を負にしている).

Raupのモデルのプロット

3次元的な「かたち」をプロットするためにPlotlyを利用する.

# Raupのモデルのプロット
import plotly.graph_objects as go
# Raupモデルに基づく殻表面座標の計算
W = 10**0.2
T = 1
D = 0.2

theta_range = np.linspace(0, 8 * np.pi, 800)
phi_range = np.linspace(0, 2 * np.pi, 60)
theta, phi = np.meshgrid(theta_range, phi_range)

x, y, z = raup_model(W, T, D, theta, phi)
# プロット
fig = go.Figure(go.Surface(x=x, y=y, z=z, showscale=False))
fig.update_layout(scene={"aspectmode": "data"})
fig.show()
Loading...

演習