c++点到直线的距离公式
时间: 2024-09-18 18:18:45 浏览: 105
在C++中,计算点到直线的距离通常涉及到向量的概念。假设我们有一个二维空间中的直线,可以用两个点A(x1, y1)和B(x2, y2)来表示其斜率k(如果不存在斜率,则认为是垂直线),然后可以定义直线方程为y - y1 = k*(x - x1)。对于任意一点P(x, y),我们可以将点到直线的垂足H(xh, yh)作为求距离的关键。
点到直线的距离公式为:
distance = |(y - yh)| / sqrt(1 + k^2)
其中,|.| 表示绝对值,sqrt() 表示平方根,k = (y2 - y1) / (x2 - x1)是直线的斜率,yh = (xh = x - k * (x - x1)) 是垂足的x坐标对应的y坐标。
以下是基本的步骤:
1. 计算直线的斜率k。
2. 如果k不存在(即两点x坐标相同,代表的是水平线),那么直接取两点y坐标的差除以无穷大(避免除零错误)。
3. 计算垂足H的y坐标。
4. 根据上述公式计算距离。
如果你需要代码实现,这里给出一个简化版的伪代码示意:
```cpp
double slope(const pair<int, int>& p1, const pair<int, int>& p2) {
return (p2.second - p1.second) / (p2.first - p1.first);
}
pair<int, int> perpendicular_point(int x, double slope, int x1, int y1) {
double y_intercept = y1 - slope * x1;
return {x, y_intercept};
}
double point_to_line_distance(const pair<int, int>& p, const pair<int, int>& line_start, const pair<int, int>& line_end) {
double k = slope(line_start, line_end);
if (k == INFINITY) {
// 水平线处理
return abs(p.second - line_start.second);
} else {
pair<int, int> h = perpendicular_point(p.first, k, line_start.first, line_start.second);
double yh = h.second;
double distance = abs(y - yh) / sqrt(1 + k*k);
return distance;
}
}
```
阅读全文