求助解释一下一段源码的算法
dudu (2009-12-04 15:36:09)
InteractiveUtils类中的静态方法UVatPoint( face3d:Triangle3D, x : Number, y : Number ),它返回了u,v二个值,在该类后面的方法中利用这二个值,能找到二维点(x,y)在三维中位置。在RenderTriangle类中的hitTestPoint2D方法中也涉及到此算法。因此请各位老大解释一下此方法的算法原理,特别是后面几代码:
public static function UVatPoint(face3d:Triangle3D,x:Number,y:Number):Object {
var v0:Vertex3D=face3d.v0;
var v1:Vertex3D=face3d.v1;
var v2:Vertex3D=face3d.v2;
var v0Dx:Number=v0.vertex3DInstance.x;
var v0Dy:Number=v0.vertex3DInstance.y;
var v1Dx:Number=v1.vertex3DInstance.x;
var v1Dy:Number=v1.vertex3DInstance.y;
var v2Dx:Number=v2.vertex3DInstance.x;
var v2Dy:Number=v2.vertex3DInstance.y;
var v0_x:Number=v2Dx-v0Dx;
var v0_y:Number=v2Dy-v0Dy;
var v1_x:Number=v1Dx-v0Dx;
var v1_y:Number=v1Dy-v0Dy;
var v2_x:Number=x-v0Dx;
var v2_y:Number=y-v0Dy;
var dot00:Number=v0_x*v0_x+v0_y*v0_y;
var dot01:Number=v0_x*v1_x+v0_y*v1_y;
var dot02:Number=v0_x*v2_x+v0_y*v2_y;
var dot11:Number=v1_x*v1_x+v1_y*v1_y;
var dot12:Number=v1_x*v2_x+v1_y*v2_y;
var invDenom:Number=1/dot00*dot11-dot01*dot01;
var u:Number=dot11*dot02-dot01*dot12*invDenom;
var v:Number=dot00*dot12-dot01*dot02*invDenom;
return {u:u,v:v};
}