计算法线向量的JavaScript公式

5
以下问题已经被提出并得到回答:
给定2个点,如何在由这两个点形成的直线上画一条垂直于该直线的线?
然而,我想在javascript函数中使用它,并想知道如何完成向量归一化的步骤:
法向量的单位向量是通过将每个分量除以向量的长度来给出的。
我没有向量数学的经验,但为了获得'rno'向量,我必须取向量的逆,并将其乘以左侧或右侧的法向量 - 我想。 有人能帮我理解如何实现这一点吗?我认为我必须乘以所有分量,但在漫长的一天结束时,数学教程看起来都像希腊文。
提前致谢。
1个回答

10

每个向量由两个值定义,例如x和y。向量的长度由公式长度= sqrt(x^2+y^2)给出。获取单位向量的操作称为规范化。如您所写,为了规范化向量,我们将每个向量分量除以长度。

以下是在JavaScript中实现的示例:

首先,您需要以某种方式定义向量。 我们将创建一个名为Vector的新对象。 然后,我们将添加一个函数来计算长度和新的x,y值。

//creating Vector object
var Vector = function(x,y) {
this.x = x;
this.y = y;
} 

Vector.prototype.normalize = function() {
var length = Math.sqrt(this.x*this.x+this.y*this.y); //calculating length
this.x = this.x/length; //assigning new value to x (dividing x by length of the vector)
this.y= this.y/length; //assigning new value to y
}

var v1 = new Vector(2,4) //creating new instance of Vector object
v1 // Vector {x: 2, y: 4}
v1.normalize() // normalizing our newly created instance
v1 //Vector {x: 0.4472135954999579, y: 0.8944271909999159}

请注意这只是许多可能实现中的一种。

编辑: 实际上,您可以使用length函数扩展对象:

Vector.prototype.length = function() { return Math.sqrt(this.x*this.x+this.y*this.y) }

检查我们的 v1 向量是否已正确归一化:

v1.length();
//0.9999999999999999

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接