c++编写一个函数,通过两个点表示一条直线,然后求一点到这条线段的距离
时间: 2024-02-23 13:58:14 浏览: 22
以下是一个使用 C++ 编写的函数,可以通过两个点表示一条直线,然后求一点到这条线段的距离:
```cpp
#include <cmath>
struct Point {
double x;
double y;
};
// 计算两点之间的距离
double distance(Point p1, Point p2) {
double dx = p1.x - p2.x;
double dy = p1.y - p2.y;
return sqrt(dx * dx + dy * dy);
}
// 计算点到直线的距离
double distanceToLine(Point point, Point lineStart, Point lineEnd) {
double lineLength = distance(lineStart, lineEnd);
// 如果线段长度为0,则点到线段的距离为点到线段起点的距离
if (lineLength == 0) {
return distance(point, lineStart);
}
// 计算点到直线的垂线的长度
double u = ((point.x - lineStart.x) * (lineEnd.x - lineStart.x) + (point.y - lineStart.y) * (lineEnd.y - lineStart.y)) / (lineLength * lineLength);
Point intersection = { lineStart.x + u * (lineEnd.x - lineStart.x), lineStart.y + u * (lineEnd.y - lineStart.y) };
double distanceToLine = distance(point, intersection);
return distanceToLine;
}
```
使用示例:
```cpp
int main() {
Point lineStart = { 1.0, 1.0 };
Point lineEnd = { 3.0, 5.0 };
Point point = { 2.0, 3.0 };
double distance = distanceToLine(point, lineStart, lineEnd);
printf("Distance to line: %lf\n", distance);
return 0;
}
```
输出结果:
```
Distance to line: 0.707107
```