三角形法向量与矢量乘法

伸出右手,使拇指与四指垂直,四指指向a的方向,弯向b的方向,则大拇指指的方向就是a*b的方向

 

数量积

数量积也叫点积,它是向量与向量的乘积,其结果为一个标量。几何上,数量积可以定义如下:

设、为两个任意向量,它们的夹角为,则他们的数量积为:

[3]

数量积被广泛应用于物理中,如做功就是用力的矢量点乘位移的矢量,即 。

向量积

向量积也叫叉积,矢量积,它也是向量与向量的乘积,不过需要注意的是,它的结果是个向量,但由于其结果是由坐标系确定,所以其结果被称为伪向量。

设有向量、,

则其向量积的矩阵表达式可写作:

      

实例:

我们需要找到三角形的法线(normal)。它是一个向量,是三角形平面上的一条垂线,如图

三角形法向量与矢量乘法_第1张图片

         法线是到达三角形表面的一条垂线

我们可以通过该平面的两个向量计算出它们的外积(cross product)从而求出这条法线。两个向量的积是一条垂直于这两条向量的新向量。我们将使用的这两条向量是点 A和B,点 B和C 之间的连线。每个向量都用有带有 x, y, z的 Object 持有。

var ab:Object = new Object();
ab.x = pointA.x - pointB.x;
ab.y = pointA.y - pointB.y;
ab.z = pointA.z - pointB.z;
var bc:Object = new Object();
bc.x = pointB.x - pointC.x;
bc.y = pointB.y - pointC.y;
bc.z = pointB.z - pointC.z;

然后计算法线,即另一个向量。求该对象的法向量(norm)。下面的代码用于计算向量ab和bc的外积:

var norm:Object = new Object();
norm.x = (ab.y * bc.z) - (ab.z * bc.y);
norm.y = -((ab.x * bc.z) - (ab.z * bc.x));
norm.z = (ab.x * bc.y) - (ab.y * bc.x);

 

你可能感兴趣的:(c,算法,object)