点到线段的距离

double PointToSegDist(double x, double y, double x1, double y1, double x2, double y2)
{
    double cross = (x2 - x1) * (x - x1) + (y2 - y1) * (y - y1);
    if (cross <= 0) return sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));

    double d2 = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
    if (cross >= d2) return sqrt((x - x2) * (x - x2) + (y - y2) * (y - y2));

    double r = cross / d2;
    double px = x1 + (x2 - x1) * r;
    double py = y1 + (y2 - y1) * r;
    return sqrt((x - px) * (x - px) + (py - y) * (py - y));
}

  

时间: 2024-10-23 10:53:58

点到线段的距离的相关文章

URAL 1348 Goat in the Garden 2(点到线段的距离)

[题目链接]:click here~~ [题目大意]:求某点到一条线段的最小距离与最大距离. [思路]: 分析可知,最大距离一定在端点处取得.那么接下来求最小距离时,先求出垂线与线段所在直线的交点,然后判断交点在不在线段上.如果在,则最小距离为垂线段的距离,即交点到此点的距离.如果不在,则最小距离必在另一端点取得.问题转换如何判断点与线段的垂足是否在线段上,可以利用叉积方便的求出. 代码: /* * Problem: NO:URAL 1348 * Running time: 1MS * Comp

[数学]点到线段的距离

参考:http://blog.csdn.net/angelazy/article/details/38489293 海伦公式:http://zhidao.baidu.com/question/470074593 点到线段最短距离的运算与点到直线的最短距离的运算二者之间存在一定的差别,即求点到线段最短距离时需要考虑参考点在沿线段方向的投影点是否在线段上,若在线段上才可采用点到直线距离公式,如图1所示. 图1 (a)最短距离为点P与其在线段AB上投影C之间的线段PC (b)最短距离为点P与端点B(或

点到线段的距离模板

1 public static double PointToSegDist(double x, double y, double x1, double y1, double x2, double y2) 2 { 3 double cross = (x2 - x1) * (x - x1) + (y2 - y1) * (y - y1); 4 if (cross <= 0) return Math.Sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1)); 5 6

POJ 1584 A Round Peg in a Ground Hole 判断凸多边形 点到线段距离 点在多边形内

首先判断是不是凸多边形 然后判断圆是否在凸多边形内 kuangbin的板子,但是有些地方不明白. 判断多边形不是凸多边形后,为什么用判断点是否在凸多边形内的模板交WA了,而用判断点是否在任意多边形内的模板A了 而且判断点是否在任意多边形的注释,返回值为什么又说是凸多边形~~~ POJ 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内) #include <iostream> #include <cstdio> #inclu

POJ - 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)

http://poj.org/problem?id=1584 题意 按照顺时针或逆时针方向输入一个n边形的顶点坐标集,先判断这个n边形是否为凸包. 再给定一个圆形(圆心坐标和半径),判断这个圆是否完全在n边形内部. 分析 1.判断给出了多边形是不是凸多边形. 2.判断圆包含在凸多边形中:一定要保证圆心在凸多边形里面.然后判断圆心到每条线段的距离要大于等于半径.. #include <iostream> #include <stdio.h> #include <string.h

NEU 1496 Planar map 计算几何,点到线段距离 难度:0

问题 H: Planar map 时间限制: 1 Sec  内存限制: 128 MB提交: 24  解决: 22[提交][状态][讨论版] 题目描述 Tigher has work for a long time in a famous company.One day she is given a planar map(look at the following) and a point.The planar map can be regarded as a polygon.The planar

使用向量的方法计算点到直线的距离

使用向量的方法效率更高,更简单. 首先要了解什么是向量,什么是向量的模 主要用到了解析几何里的几个公式 a * b = | a | * | b | * cos(x),其中x为向量a,b的夹角 | a | * 单位向量 = a,单位向量为模为1的向量 向量的加减法 ,如下图所示 向量的加法 向量的减法 问题的原型如下图所示,红色的点为鼠标位置,蓝色的点(x0,y0),(x1,y1)为线段的端点,求红色的点到直线的距离 可以将点到线的距离转换为直角三角形的问题,如下图所示: 我们定义鼠标所在点为M,

已知直线上的两点 A(x1, y1), B(x2, y2) 和另外一点 C(x0, y0),求C点到直线的距离。

数学知识太差,一点点积累,高手勿喷. 1. 先求出AB向量 a = ( x2-x1, y2-y1 ) 2. 求AB向量的单位方向向量 b = √((x2-x1)^2 + (y2-y1)^2)) a1 = ( (x2-x1)/b, (y2-y1)/b ) 3.求出CA的法向向量(或CB的法向向量) c = ( y0-y1, -(x0-x1) ) 4. 距离 = AC法向向量与BC向量的单位方向向量的数量积 距离d = a1 * c = ( (x2-x1)(y0-y1) - (y2-y1)(x0-x

计算点到线段的最近点

如果该线段平行于X轴(Y轴),则过点point作该线段所在直线的垂线,垂足很容易求得,然后计算出垂足,如果垂足在线段上则返回垂足,否则返回离垂足近的端点:如果该线段不平行于X轴也不平行于Y轴,则斜率存在且不为0.设线段的两端点为pt1和pt2,斜率为:k = ( pt2.y - pt1. y ) / (pt2.x - pt1.x );该直线方程为:y = k*( x - pt1.x) + pt1.y.其垂线的斜率为 - 1 / k,垂线方程为:y = (-1/k) * (x - point.x)