获得一条直线上任意一点的垂线(法线) |
您所在的位置:网站首页 › 直线的法线方程公式 › 获得一条直线上任意一点的垂线(法线) |
如何在红线(向量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 |