c++计算点到线段的距离
时间: 2023-09-11 21:04:48 浏览: 200
C++计算机和常用到的一些函数
计算点到线段的距离可以分为以下步骤:
1. 计算点到线段所在直线的垂线垂足的坐标。
2. 判断线段垂足是否在线段上,如果在线段上,垂足到点的距离即为点到线段的距离;如果不在线段上,则分别计算点到线段两个端点的距离,取最小值即为点到线段的距离。
下面是一个C++实现示例:
```c++
#include <iostream>
#include <cmath>
using namespace std;
struct Point
{
double x, y;
};
double dist(Point p1, Point p2) // 计算两点距离
{
return sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2));
}
double lineDist(Point p, Point l1, Point l2) // 计算点到线段距离
{
double d = dist(l1, l2);
if (d < 1e-6) // 线段长度为0
return dist(p, l1);
double t = ((p.x - l1.x) * (l2.x - l1.x) + (p.y - l1.y) * (l2.y - l1.y)) / (d * d);
if (t < 0) // 垂足在线段外部,点到线段端点1的距离最小
return dist(p, l1);
else if (t > 1) // 垂足在线段外部,点到线段端点2的距离最小
return dist(p, l2);
else { // 垂足在线段上,即点到垂足的距离即为点到线段的距离
Point h = {l1.x + t * (l2.x - l1.x), l1.y + t * (l2.y - l1.y)};
return dist(p, h);
}
}
int main()
{
Point p = {1, 2};
Point l1 = {0, 0}, l2 = {3, 4};
double d = lineDist(p, l1, l2);
cout << "点到线段的距离为:" << d << endl;
return 0;
}
```
阅读全文