ソフトウェア開発 C言語

線分と点の距離を求める

戻る


与えられた座標から、線分と点の距離を求めるコードは以下の通り。

#include <math.h>

double line_seg_point_distance(int ax, int ay, int bx, int by, int px, int py)
{
    int dx, dy, r2;
    double t, cx, cy;
    dx = bx - ax;
    dy = by - ay;
    if (dx == 0 && dy == 0)
        return sqrt((px - ax) * (px - ax) + (py - ay) * (py - ay));
    r2 = dx * dx + dy * dy;
    t = (dx * (px - ax) + dy * (py - ay)) / (double)r2;
    if (t < 0)
        return sqrt((px - ax) * (px - ax) + (py - ay) * (py - ay));
    // 2012/8/3 間違い修正。田中等さんありがとう。
    //if (t * t > r2) 
    if (t > 1)
        return sqrt((px - bx) * (px - bx) + (py - by) * (py - by));
    cx = (1 - t) * ax + t * bx;
    cy = (1 - t) * ay + t * by;
    return sqrt((px - cx) * (px - cx) + (py - cy) * (py - cy));
}

ソース: lineseg.zip


国内格安航空券サイトe航空券.com

戻る

©片山博文MZ
katayama.hirofumi.mz@gmail.com

inserted by FC2 system