C++ 如何求点到直线的距离?(两点式)
Posted Dontla
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 如何求点到直线的距离?(两点式)相关的知识,希望对你有一定的参考价值。
文章目录
点到直线的距离公式:
将两点式整理可得:
( 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
以上是关于C++ 如何求点到直线的距离?(两点式)的主要内容,如果未能解决你的问题,请参考以下文章