获得一条直线上任意一点的垂线(法线)

您所在的位置:网站首页 直线的法线方程公式 获得一条直线上任意一点的垂线(法线)

获得一条直线上任意一点的垂线(法线)

2024-07-16 01:30| 来源: 网络整理| 查看: 265

如何在红线(向量a)上一点(比如中点)求这个红线的垂直线

这里提供很好的解决思路

2d向量旋转法

a向量的x,y可以按照极坐标理解(len, angle) x = len*cos(angle) y = len*sin(angle)

如果垂直, 那么angle+90或者-90就可以得到 x1 = len*cos(angle+PI/2) y1 = len*sin(angle+PI/2)

这种方式要进行转换, 比较麻烦, 要获得长度和角度, 改为矩阵计算方法 (x1,y1) = [x,y] * [cos(angle), sin(angle)] = [x*cos(angle)-y*sin(angle), x*sin(angle)+y*cos(angle)]

var b = Vector2(a.x*cos(PI/2)-a.y*sin(PI/2), a.x*sin(PI/2)+a.y*cos(PI/2))

很多游戏/算法引擎里包含了旋转向量的api vector2.rotated(angle) 垂直方向取决于角度正负

3d向量叉乘法

用到三角函数来进行旋转十分方便, 但计算垂直点还有更快的方法

学过向量乘法, 你会发现, 如果向量xz平面的两个向量叉乘(cross), 那么得到的新的向量, 必定垂直于这两个向量, 而且这两个向量不必垂直

这就相当于把实数部分通过暂时的虚数处理, 再还原为实数的做法, 你可以假设一个空间z轴的向量(0,0,1), 这样向量y由于垂直于z的原因, 是绝对会回到2d平面的

创建一个向量z(0,0,1) 叉乘向量x和z = (x2z3-x3z2, x3z1-x1z3, x1z2-x2z3) = 向量y在空间上的描述 由于这时候得到的y的z方向永远为0, 那么直接把3d下的y(x,y,z)向量改为2d的既可以y(x,y)

y向量朝向正负取决于向量x与向量z之间叉乘的前后顺序

很多游戏/算法引擎里包含了旋转向量的api vector3.cross(v3) 垂直方向取决于谁叉谁

其实

垂线其实直接通过这样获得 a(x,y)

垂线 = b(y,-x) 垂线2 = b(-y,x) 😂 延伸阅读

https://www.jianshu.com/p/1b90e19b2028



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3