Raupのモデル
Raupのモデル¶
数らせんは様々な巻きパタンを記述でき,多くの平巻の殻の近似に有用である. しかし,太さを持った管(螺管)が3 次元的に巻いている実際の貝殻を記述するにはいささか表現力が足りない. 理論形態学が創始される契機となったRaup のモデル(Raup’smodel; )を見てみよう.
Raup のモデルのコンセプトは「母曲線と呼ばれる殻口形状を近似する閉曲線」が「巻軸を中心に回転しながら成長,転移することで螺管を近似」する,である. Raup のモデルでは4つのパラメータ,巻軸周りの母曲線一回転あたりの螺層拡大率,巻軸方向への転移率,巻軸からの相対的な臍サイズ,殻口のアスペクト比,でこれらの性質を指定する. これらのパラメータは2次元的な非破壊計測により推定することが比較的容易であり,実証研究に頻繁に用いられる要因の一つとなっている.
ここでは,Raup のモデルを以下のように定義しよう(いくつか異なる定義がある).
,は母曲線が巻軸周りに回転した角度,は殻口位置を指定するパラメータ, は,をパラメータとするパラメトリックな曲面であり,殻表面の位置ベクトルとなっている.
は 軸回りの回転を表す回転行列
を表す.
Raupのモデルと三次元の可視化¶
Raup のモデルのパラメータを変化させることで多様な殻形態を描くことができる. ここでは,と固定(殻口が円)と仮定し,以下のシンプルなケースで様々な殻形態を描いてみよう.
式(1)を整理すると,以下のようになる.
.
効率的な貝殻形態の計算のために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...