シェーダプログラミング用の下準備。
「線分からの距離を求める」
例えば・・・
線分の長さが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次元でも使える!