タグ

距離に関するedo_m18のブックマーク (2)

  • line_point-okadahiroshi

    概要 線分 (x0,y0) – (x1,y1) と与えられた点 (px,py)との距離をもとめる。 点から線上に垂線をおろし、その垂線の長さを計れば距離が求まる。 手法 簡単にするため、直線(上の点)は、媒介変数 t を使って (x0+dx*t, y0+dy*t)で表すことにする。 垂線と線分のベクトルの内積が0であることを利用して解をもとめる。 例外 垂線の足 (tx,ty) が線分上になければ、線分の端点(x0,y0) ,(x1,y1)のうち、 垂線の足に近い方の端点から与えられた点までの距離を計れば良い。 手順 dx = x1 - x0; dy = y1 - y0 とする。 -- 線分上の点は (x0+dx*t,y0+dy*t) 線分と垂線のベクトルの内積は . (dx,dy)・(x0+dx*t-px,y0+dy*t-py) = (dx^2+dy^2)*t + dx*(x0-px)

  • 点と線の距離を求める

    点ABを通る線と点Pから、点と直線の距離Hを求めるには... ベクトルABとベクトルAPを外積(cross product)して、Dの面積を求めます。 Dの面積 = ベクトルAB × ベクトルAP Dは平行四辺形なので「 H * L = D 」であることがわかります。 点と直線の距離H = D / L プログラミング例(2次元) #include <math.h> //頂点の定義 struct Vertex2D{ double x; double y; }; //ベクトルの定義(頂点と同じ) #define Vector2D Vertex2D //点間距離 double distance_vertex(Vertex2D p1, Vertex2D p2) { return pow( ( p2.x - p1.x ) * ( p2.x - p1.x ) + ( p2.y - p1.y ) * (

  • 1