「符号付き距離関数」の版間の差分

提供:ペチラボ書庫
ナビゲーションに移動 検索に移動
編集の要約なし
14行目: 14行目:
d = ||\boldsymbol{x} - \boldsymbol{c}|| - r
d = ||\boldsymbol{x} - \boldsymbol{c}|| - r
</math>
</math>
=== 正n角形 ===
0番目の頂点がx軸に乗っている場合で考える。
このときSDFは次の手順で得られる。
* 何番目の辺が最も近いか考える(角度でわかる)
* その辺の法線ベクトルとの内積を用いて距離を計算する
まず、原点から点 <math>(x,y)</math> に伸ばした半直線が<math>x</math>軸となす角は
<math>\theta = \mathrm{Atan2}(y,x)</math>
これに一番近い辺は
<math>k = \lfloor \theta / (2\pi / n) \rfloor</math>
番目である。
その辺の法線ベクトルは
<math>
v = \left( \cos\frac{2\pi(0.5+k)}{n},~ \sin\frac{2\pi(0.5+k)}{n} \right)
</math>
<math>
d = (x - tv) \cdot v
</math>
ここで <math>t</math> は辺の中心と原点の距離である


==3Dの例==
==3Dの例==

2024年7月30日 (火) 01:47時点における版

Signed Distance Function の頭文字を取って SDF ともよく呼ばれる

定義

距離空間において、集合の境界のうち最も近い点との距離。符号は境界の内側か外側かで変わる。

符号の決め方はどちらでもよいが、このページでは普通の感覚に合わせて外側を正としておく

2Dの例

半径 [math]\displaystyle{ r }[/math] の円とは中心 [math]\displaystyle{ \boldsymbol{c} }[/math] からの距離が [math]\displaystyle{ r }[/math] の点の集合であることから、

[math]\displaystyle{ d = ||\boldsymbol{x} - \boldsymbol{c}|| - r }[/math]

正n角形

0番目の頂点がx軸に乗っている場合で考える。

このときSDFは次の手順で得られる。

  • 何番目の辺が最も近いか考える(角度でわかる)
  • その辺の法線ベクトルとの内積を用いて距離を計算する

まず、原点から点 [math]\displaystyle{ (x,y) }[/math] に伸ばした半直線が[math]\displaystyle{ x }[/math]軸となす角は [math]\displaystyle{ \theta = \mathrm{Atan2}(y,x) }[/math]

これに一番近い辺は [math]\displaystyle{ k = \lfloor \theta / (2\pi / n) \rfloor }[/math] 番目である。

その辺の法線ベクトルは [math]\displaystyle{ v = \left( \cos\frac{2\pi(0.5+k)}{n},~ \sin\frac{2\pi(0.5+k)}{n} \right) }[/math]

[math]\displaystyle{ d = (x - tv) \cdot v }[/math]

ここで [math]\displaystyle{ t }[/math] は辺の中心と原点の距離である

3Dの例

円と同様。

[math]\displaystyle{ d = ||\boldsymbol{x} - \boldsymbol{c}|| - r }[/math]

テクニック

計算上のテクニックを書き残していきたい