/*计算点到直线之间的距离*/
double dis_calculate(vec2d_t *point, vec2d_t *line_point_1, vec2d_t *line_point_2){
/*处理斜率不存在的情况*/
if (line_point_1->x_ == line_point_2->x_) {
return fabs(point->x_ - line_point_1->x_);
}
double k, b;/*y=kx+b*/
k = (line_point_2->y_ - line_point_1->y_) / (line_point_2->x_ - line_point_1->x_);
b = line_point_2->y_ - line_point_2->x_ * k;
double res = fabs(k*point->x_-point->y_ + b) / sqrt(k*k+1);
return res;
}
vecd_t结构:x_和y_表示横纵坐标
typedef struct vec2d_s {
double x_;
double y_;
}vec2d_t;
完整代码:
#include <stdio.h>
#include <math.h>
typedef struct vec2d_s {
double x_;
double y_;
}vec2d_t;
/*计算点到直线之间的距离*/
double dis_calculate(vec2d_t *point, vec2d_t *line_point_1, vec2d_t *line_point_2){
/*处理斜率不存在的情况*/
if (line_point_1->x_ == line_point_2->x_) {
return fabs(point->x_ - line_point_1->x_);
}
double k, b;/*y=kx+b*/
k = (line_point_2->y_ - line_point_1->y_) / (line_point_2->x_ - line_point_1->x_);
b = line_point_2->y_ - line_point_2->x_ * k;
double res = fabs(k*point->x_-point->y_ + b) / sqrt(k*k+1);
return res;
}
void main()
{
vec2d_t p;
p.x_ =0;
p.y_ =0;
vec2d_t point1;
vec2d_t point2;
point1.x_ =0;
point1.y_ =1;
point2.x_ =1;
point2.y_ =0;
double dis = dis_calculate(&p, &point1, &point2);
printf("dis between p to line is: %lf\n", dis);
}
输出结果:
dis between p to line is: 0.707107