C++ 如何求点到直线的距离?(两点式)

该博客介绍了如何使用C++代码计算一个点到直线的距离。通过数学公式将两点式整理为点到直线的距离公式,并用浮点数处理来实现。示例代码展示了如何定义坐标点和线段结构体,以及计算距离的函数。最终,代码运行得出距离结果为0.707107。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录


点到直线的距离公式:
在这里插入图片描述

将两点式整理可得:

( y1 - y2 ) * x + ( x2 - x1 ) * y + ( x1 * y2 - x2 * y1 ) = 0

在这里插入图片描述

两者结合可得:
(其中:fabs是求绝对值,sqrt是开2次根号,pow是求一个数的n次方)

distance = fabs(((y1 - y2) * x0 - (x1 - x2) * y0 + (x1 * y2 - x2 * y1)) / sqrt(pow(y1 - y2, 2) + pow(x1 - x2, 2)));

代码

#pragma warning(disable : 4996)
#include<iostream>
#include <stdio.h>
#include <stdlib.h>
#include "math.h"
#include "memory.h"

using namespace std;

#define KY_MIN(x,y) (x < y ? x : y)
#define KY_MAX(x,y) (x > y ? x : y)

/**
* @brief 单坐标点描述
*/
typedef struct _OPDEVSDK_POS_POINT_ST_
{
    float       x;
    float       y;
}OPDEVSDK_POS_POINT_ST;

/**
* @brief 线段描述
*/
typedef struct _OPDEVSDK_POS_LINE_ST_
{
    OPDEVSDK_POS_POINT_ST       point1;
    OPDEVSDK_POS_POINT_ST       point2;
}OPDEVSDK_POS_LINE_ST;

double get_distance(OPDEVSDK_POS_LINE_ST& line, OPDEVSDK_POS_POINT_ST& point);


int main() {
    OPDEVSDK_POS_LINE_ST line = { {0,0}, {1,1} };
    OPDEVSDK_POS_POINT_ST point = { 1,0 };
    cout << get_distance(line, point) << endl;
    return 0;
}


double get_distance(OPDEVSDK_POS_LINE_ST& line, OPDEVSDK_POS_POINT_ST& point)
{
    double x1 = line.point1.x;
    double y1 = line.point1.y;
    double x2 = line.point2.x;
    double y2 = line.point2.y;
    double x0 = point.x;
    double y0 = point.y;
    double distance;
    distance = fabs(((y1 - y2) * x0 - (x1 - x2) * y0 + (x1 * y2 - x2 * y1)) / sqrt(pow(y1 - y2, 2) + pow(x1 - x2, 2)));    //点到直线公式

    return distance;
}

运行结果:

0.707107

参考文章:一点到另外两点所成直线的距离

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dontla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值