RSS

 

RSS


シェーダプログラミング用の下準備。

「線分からの距離を求める」

例えば・・・
線分の長さが1.0として
その線分からの距離が0.1以下のところを塗れば、
結局のところ線分が描ける。<<<<<

線分ABと点Pの距離を求める。

ABPは三角形だ。

大筋として
Pから直線ABに垂線をおろし
線分ABにのっていれば、           ※い
  距離はその垂線の長さ                         ※ろ
そうでなければ
 AまたはBからの距離の近い方       ※は

順番に
 それぞれの点の間の距離を求めて
float ab, ap, bp; とする。

ab*ab+ap*ap==bp*bpのときは∠Aが直角
ab*ab+bp*bp==ap*apのときは∠Bが直角ということを踏まえて

※いのif文は

if(ab*ab+ap*ap>bp*bp && ab*ab+bp*bp>ap*ap)

if文がtrueの場合

三角形の面積tをまずヘロンの公式で求める。
ヘロンの公式は忘れたので wikipediaに見に行って
float s= (ab+ap+bp)/2.0;
float t=sqrt(s*(s-ab)*(s-ap)*(s-bp));

底辺がabなので高さ(すなわち垂線の長さ)は
三角形の面積を求める公式を逆算して

※ろ 
 float d=(t*2.0)/ab;

if文がfalseの場合の
※は は
 求める fload d= ap<bp ? ap : bp;  だ。

計算はどうやると速いとかもっと簡単とかいう検討は残るが、答えとしては出た、めでたし。

座標が2次元でなく3次元でも使える!


  • コメント (0)
  • トラックバック (0)
トラックバックURL :
http://www.iwai-masaka.jp/tb.cgi/55952