使用向量的方法计算点到直线的距离

基础:

  • 单位向量:模等于1的向量,一个非零向量除以它的模,可得所需单位向量。
  • 向量的加减法:

  • 向量的投影:设两个非零向量ab夹角为θ,则将|b|·cosθ 叫做向量b在向量a方向上的投影
  • 向量的点乘:

  • 向量的叉乘:

模长:        ,即长度在数值上等于以向量ab、夹角θ组成的平行四边形的面积。

方向:与这两个向量所在的平面垂直,且遵守右手定则(或左手定则)。

示例:

红色的点为鼠标位置,蓝色的点(x0,y0),(x1,y1)为直线上的两个点,求红色的点到直线的距离


将问题进行一下转化:如下图所示


点乘法:

向量c为向量a在向量b上的投影向量,求得向量e的模即可求得最终结果。

向量a已知,并且e=a-c,则问题转化为求向量c

向量c的方向很容易确定,即b.normalized;而向量c的模|c|=|a|·cosθ,则求出cosθ即可。

由向量的点乘很容易知道a·b|a||b|cosθ,则最终问题得以解决。

叉乘法:

|axb|等于它们所张开的平行四边形的面积S。S除以|b|即等于点到直线的距离。

### C++ 实现点到直线距离计算 为了计算三维空间中的点到直线距离,可以利用向量叉积来完成这一操作。具体来说,给定一条由两个端点定义的线段 \( \textbf{A} \) 和 \( \textbf{B} \),以及一个不在该直线上任意位置的空间点 \( \textbf{P} \),可以通过下面的方式求解: \[ d = \frac{\| (\textbf{B}-\textbf{A}) \times (\textbf{P}-\textbf{A}) \|}{\|\textbf{B}-\textbf{A}\|} \] 其中 \(d\) 表示所求距离。 下面是具体的 C++ 代码实现[^1]: ```cpp #include <iostream> #include <cmath> struct Vector3 { double x, y, z; // Constructor initializes all components to zero. Vector3() : x(0), y(0), z(0) {} // Constructor that allows initialization with values. Vector3(double _x, double _y, double _z) : x(_x), y(_y), z(_z) {} // Subtraction operator overloading for vectors. Vector3 operator-(const Vector3& v) const { return Vector3(x - v.x, y - v.y, z - v.z); } // Cross product between two vectors. Vector3 cross(const Vector3& v) const { return Vector3( y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x ); } }; // Function calculates magnitude (length) of a vector. double length(Vector3 vec){ return std::sqrt(vec.x*vec.x + vec.y*vec.y + vec.z*vec.z); } // Calculate distance from point P to line defined by points A and B. double distPointToLine(Vector3 A, Vector3 B, Vector3 P) { Vector3 AB = B - A; Vector3 AP = P - A; return length(AB.cross(AP)) / length(AB); } ``` 此函数 `distPointToLine` 接受三个参数——两点用于表示直线上的不同位置(即起点和终点),第三个则是待测的目标点。返回的结果就是目标点至这条无限延伸直线之间的最短路径长度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值