点到线段距离的计算根据点与直线的位置分为两大类(第二类分为两小类)

1,如左图所示,如果点与线段的垂直线与线段所在直线的交点在线段上,所求的距离就是点到线段的距离

2,如右图所示,如果是在射线上,就是点到射线一端的距离,图中点到线段的距离就是P到A的距离

给出一个结论,给定一向量 U 水平向右。

通过另一向量 V 与向量 U 的点积,叉积 可以判断 V 的位置;(图中第一个值为点积,第二个为叉积)

此处我们只用到点积进行判断;

设A,B为线段两端点,P为线段外一点。

向量  V1=B-A   V2=P-A   V3=P-B;

分为两种情况:

第一种是向量 V1 与 V2 的点积为负数  则 V2 可能出现的范围如图所示,可以看出点到线段的距离就是 PA 的距离

第二种是向量 V1 与 V3 的点积为正数 则v3可能出现的范围如图所示,可以看出点到线段的距离就是 PB 的距离

最后给出代码:

框中的定义与函数属于计算几何基础,下面的博客有详解说明

https://blog.csdn.net/love_phoebe/article/details/81120165

#include<bits/stdc++.h>
using namespace std;
///
const double eps=1e-10;                                                              //
struct Point{                                                                        //double x,y;                                                                      //Point(double x=0,double y=0):x(x),y(y){}
};
typedef Point Vector;Vector operator + (Vector A,Vector B){return Vector(A.x+B.x,A.y+B.y);}
Vector operator - (Vector A,Vector B){return Vector(A.x-B.x,A.y-B.y);}
Vector operator * (Vector A,double B){return Vector(A.x*B,A.y*B);}
Vector operator / (Vector A,double B){return Vector(A.x/B,A.y/B);}int dcmp(double x){if(fabs(x)<eps)return 0;return (x>0)?1:-1;}
bool operator == (const Vector A,const Vector B){return dcmp(A.x-B.x)==0 && dcmp(A.y-B.y)==0;
}
double Dot(Vector A,Vector B){return A.x*B.x+A.y*B.y;}  //计算向量点积
double Length(Vector A){return sqrt(Dot(A,A));}         //计算向量长度                //
double Cross(Vector A,Vector B){return A.x*B.y-B.x*A.y;}//计算向量叉积                //
///double DistanceToSegment(Point P,Point A,Point B){if(A==B)return Length(P-A);Vector v1=B-A,v2=P-A,v3=P-B;if(dcmp(Dot(v1,v2))<0)return Length(v2);           //第二类第一小类else if(dcmp(Dot(v1,v3))>0)return Length(v3);      //第二类第二小类else return fabs(Cross(v1,v2))/Length(v1);
}
int main(){return 0;
}

点到线段的距离 计算几何相关推荐

  1. c# 计算点到线段的距离

    //计算点到线段的距离 public double pointToLine(Vector2 point,LineBase line) {//距离double distance =0;//线段的起点与终 ...

  2. 点到直线的距离c语言程序,点到线段的距离 题解(C++)

    初步分析 这道题之前有<点到直线的距离>一题. 如图,我们不妨来下个定义(名字是乱起的,如果有雷同就以以下定义为准): 对于任意线段l,在其两个端点上分别作垂直于l的直线,若点在两直线之间 ...

  3. costmap_2d 中计算footprint 的内切圆半径和外切圆半径的函数解析——点到线段的距离计算

    计算footprint 的内切圆半径和外切圆半径,用到点到线段的距离,计算方法 两个向量的点积等于一个向量在另一个向量的投影 乘以 另一个向量的模 点到线段的三种情况如下: /*作用:计算点到线段的距 ...

  4. 向量法计算空间点到线段的距离(python)

    中学数学告诉我们,计算点到线段的距离有两种. 我们假设点是P,线段是AB.P和AB都由三维的笛卡尔坐标表示.现计算P到AB的距离. 第一种是,过点P向线段AB上画垂线,判断垂足有没有落在线段上.如果落 ...

  5. 玲珑杯-射击气球-点到线段的距离

    玲珑杯-射击气球-点到线段的距离 求点到线段的距离 由于网页显示吃tab键,缩进无法正常显示 对于空间V-xyz三维几何中点到水平线段的距离,可以投影到xy平面(欧式几何)上.distance = √ ...

  6. python 点到线段的距离_点到线段的最短距离

    博客转载自:http://blog.sina.com.cn/s/blog_5d5c80840101bnhw.html 点到线段最短距离的运算与点到直线的最短距离的运算二者之间存在一定的差别,即求点到线 ...

  7. 关于计算点到线段的距离

    已知线段AB,求某点到该线段的距离.有三种情况,如图:图中只画出两种,其实垂足在另一侧也是一样的.还有就是垂足与A或B共点,这两种情形可以按照前述两种情况任意之一处理. 当垂足在线段上时(包括垂足与A ...

  8. 点到线段的距离计算方法

    如何计算点到线段的最近距离 算法原理图 在二维/三维图形学系统当中,线段的拾取是一个经常使用的功能 如何根据鼠标点来判断线段是否被选择了,最主要的方法之一是通过点到线段的最小距离来判定的 无论二维还是 ...

  9. 点到线段的距离_直线垂直,垂线的性质,点到直线的距离

    欢迎关注公z号:沈阳奥数 两条直线相交所成的四个角中,有一个角是直角时,就说这两条直线互相垂直,其中一条直线叫做另一条直线的垂线,它们的交点叫垂足. 如图,直线AB与CD垂直于点E,记作:AB⊥CD于 ...

  10. URAL 1348. Goat in the Garden 2[求点到线段的距离]

    题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1348 题目的意思是:求一个点到线段的最短距离和最长距离.. 最长距离比较容易,就是求点到 ...

最新文章

  1. JavaScript 函数
  2. 深入理解Activity启动流程(三)–Activity启动的详细流程2
  3. 如何将java web项目上线/部署到公网
  4. java 内存详解_Java内存详解
  5. Oracle 增删改查
  6. VTK:vtkChartMatrix用法实战
  7. Node项目部署到阿里云服务器(ECS),以Nuxt.js服务端渲染项目为例
  8. Vonage再度入围IDC CPaaS“领导者”
  9. linux get current thread count and system threads limit
  10. 国际化android
  11. Spark:聚类算法之LDA主题模型算法
  12. 平衡车gazebo仿真
  13. 有关注册表技术的各大网站列表
  14. Google Earth导入GPS设备NMEA文本数据
  15. Java多线程基础(十三)——Thread-Specific Storage(ThreadLocal)模式
  16. 一文了解各种无线通信 - NB-IOT、LoRa、433、GPRS、4G、WIFI、2.4G、PKE
  17. 大厂对学历的要求是什么?如果学历不够,拿什么来凑?
  18. 【参赛作品66】快速搭建一套openGauss主备高可用集群
  19. 用sed删除文件中指定行
  20. 如何编写一个Java帮助文档

热门文章

  1. 魔兽服务器里炉石怎么修改,魔兽世界炉石怎么用
  2. 华为IPSec VPN的配置
  3. mysql front 垃圾_MySQL_Front 的缺点
  4. mysql front登陆1045错误_解决MySQL-Front连接MySQL出现1045错误
  5. 顶层设计:为智慧城市描画建设“蓝图”
  6. 2019年湖南省职业院校技能大赛高职组“信息安全管理与评估”赛项任务书-A卷
  7. VS2015如何添加头文件
  8. c语言顺序比较法字符,常用C语言排序算法解析
  9. 离线脱机版个人笔记软件的选择
  10. python scrapy之模拟浏览器的随机更换