「符号付き距離関数」の版間の差分
編集の要約なし |
(→2Dの例) |
||
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]
テクニック
計算上のテクニックを書き残していきたい