点到线段的最小距离(C++)
2014-01-27 15:49
1531 查看
/*********************************/ // 如果经过点做直线的垂足,垂足落在线段上,则取垂线段的距离 // 否则取到线段两端点距离的最小值 // // 参数: // point: 存储点的xy坐标 // p1, p2: 线段的两点 // // return: 点到线段的最小距离 /*********************************/ float CalculatePointToLineDistance(float point[2], const float p1[2], const float p2[2]) { float dis = 0.f; float dx = p2[0] - p1[0]; float dy = p2[1] - p1[1]; // 两直线垂直,向量表示法,转换后公示 float k = -((p1[0] - point[0])*dx + (p1[1] - point[1])*dy) / ( dx*dx + dy*dy); float footX = k*dx + p1[0]; float footY = k*dy + p1[1]; //if垂足是否落在线段上 if( footY >= min(p1[1], p2[1]) && footY <=max(p1[1], p2[1]) && footX >= min(p1[0], p2[0]) && footX <=max(p1[0], p2[0] ) ) { dis = sqrtf((footX-point[0])*(footX-point[0]) + (footY-point[1])*(footY-point[1])); } else { float dis1 = sqrtf((p1[0]-point[0])*(p1[0]-point[0]) + (p1[1]-point[1])*(p1[1]-point[1])); float dis2 = sqrtf((p2[0]-point[0])*(p2[0]-point[0]) + (p2[1]-point[1])*(p2[1]-point[1])); dis = ( dis1 < dis2 ? dis1 : dis2 ); } return dis; }
相关文章推荐
- 最小编辑距离及其C++实现
- 点到线段的最大最小距离
- 求空间中2条线段的最短距离(用osg+C++写的)
- 计算空间中两条线段的最小距离
- 平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。
- hust1346(两个线段的最近距离和最小距离)
- 【算法和数据结构】图(二)最小生成树之Prim算法(C++实现)
- 线段间最短距离
- C/C++训练1---最大公约数与最小公倍数(类)
- poj2031最小生成树(建图)(注意c++与g++的区别)
- c++实现的最小堆类
- 在C和C++定义最大最小整数值
- 基于 51 最小系统的距离测量仪制作
- poj3608_Bridge Across Islands_旋转卡壳&&点到线段的距离
- C++ - 三柱汉诺塔的最小步数
- C++使用两个栈实现一个可以获取栈中最大值和最小值的栈
- 求de Bruijn图上与目标串最小编辑距离
- hdu5723 最小生成树+DFS(距离和,期望)
- LeetCode219 查找相等两个数之间的最小距离
- 图的深度优先(非递归)、广度优先、最小生成树的C++实现