问问c++求点到线段的距离怎么求?

问问各位c++如何求解点到线段的距离怎么求?脑瓜疼怎么办,求解决

这个不难


#include <iostream>
#include <cmath>
using namespace std;

// 定义点和线段结构体
struct Point {
    double x, y;
};

struct LineSegment {
    Point p1, p2;
};

// 计算两点之间的距离
double distance(Point p1, Point p2) {
    return sqrt(pow(p2.x - p1.x, 2) + pow(p2.y - p1.y, 2));
}

// 计算点到线段的距离
double distanceToLineSegment(Point p, LineSegment l) {
    double len = distance(l.p1, l.p2);
    if (len == 0) { // 线段长度为0,即线段为点
        return distance(p, l.p1);
    }
    double r = ((p.x - l.p1.x) * (l.p2.x - l.p1.x) + (p.y - l.p1.y) * (l.p2.y - l.p1.y)) / pow(len, 2);
    if (r <= 0) { // 垂足在p1处
        return distance(p, l.p1);
    } else if (r >= 1) { // 垂足在p2处
        return distance(p, l.p2);
    } else { // 垂足在线段上
        Point foot = { l.p1.x + r * (l.p2.x - l.p1.x), l.p1.y + r * (l.p2.y - l.p1.y) };
        return distance(p, foot);
    }
}

int main() {
    Point p = { 2, 3 };
    LineSegment l = { { 0, 0 }, { 4, 4 } };

    double dist = distanceToLineSegment(p, l);

    cout << "点到线段距离: " << dist << endl;

    return 0;
}



  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7780161
  • 你也可以参考下这篇文章:【C++】基于C++的封装和运算符重载的思想,实现基于通讯录类的数据查询工作
  • 除此之外, 这篇博客: 用C++编写一个程序模拟患者在医院等待就诊的情况中的 用C++编写一个程序模拟患者在医院等待就诊的情况 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 您还可以看一下 夏曹俊老师的C++实战精讲--商用软件中的C++工程开发技术实践课程中的 对象构建时间性能构建中的开销问题小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案:

    计算点到线段的距离可以使用数学中的几何知识来实现。以下是一种使用C++编程计算点到线段的距离的方法:

    1. 首先,定义一个表示点的结构体,包括坐标x和y: struct Point { double x; double y; };

    2. 定义一个表示线段的结构体,包括线段的两个端点: struct Line { Point p1; Point p2; };

    3. 编写一个函数来计算点到线段的距离,函数的参数为点和线段结构体: ``` double distanceToLine(Point point, Line line) { double A = line.p2.y - line.p1.y; double B = line.p1.x - line.p2.x; double C = line.p2.x * line.p1.y - line.p1.x * line.p2.y; double distance = fabs(A * point.x + B * point.y + C) / sqrt(A * A + B * B);

      // 判断点到线段的垂直投影是否在线段上 if (point.x >= line.p1.x && point.x <= line.p2.x || point.x >= line.p2.x && point.x <= line.p1.x) { return distance; }

      // 如果点到线段的垂直投影不在线段上,则计算点到线段两个端点的距离 double distanceToP1 = sqrt(pow(point.x - line.p1.x, 2) + pow(point.y - line.p1.y, 2)); double distanceToP2 = sqrt(pow(point.x - line.p2.x, 2) + pow(point.y - line.p2.y, 2)); return fmin(distanceToP1, distanceToP2); } ```

    4. 在主函数中创建点和线段,并调用上述函数计算点到线段的距离: int main() { Point point = {1.0, 1.0}; Line line = {{0.0, 0.0}, {2.0, 2.0}}; double distance = distanceToLine(point, line); cout << "The distance from the point to the line segment is: " << distance << endl; return 0; }

    这个程序使用了线段的一般方程来计算点到线段的距离。首先计算线段的方程参数A、B和C,然后计算点到线段的垂直距离。最后,根据点与线段的位置关系,计算点到线段两个端点的距离,并返回较小的距离。

    使用上述代码,可以在C++中计算点到线段的距离。请注意,这只是一种方法,还有其他的方法可以实现相同的功能。