<>//这是一段将空间点集绕x轴旋转的代码,在理论上它是绝对正确的
//但是由于计算精度的问题,每作一次运算都会产生一些误差,
//当计算次数足够多,累积的误差就变得很大,使物体变形。。。
for(var i in vertexList){
out.y = cosRad* vertexList.y - sinRad* vertexList.z;
out.z = sinRad* vertexList.y + cosRad* vertexList.z;
out.x = vertexList.x;
}
___________________________________________________________</P>
<><FONT color=#ff3300>//下面这个函数实现绕x和y轴旋转,为什么不会产生累积误差变形呢?????</FONT>
// 单个空间点旋转变换,xa,ya均为角度值,dotArray为存储点集的数组名,num为需要操作的空间点的编号
function dot_rotate(xa, ya,dotArray,num) {
var i;
var rad = Math.PI/180;
xa *= rad;
ya *= rad;
var sin_xa = Math.sin(xa);
var cos_xa = Math.cos(xa);
var sin_ya = Math.sin(ya);
var cos_ya = Math.cos(ya);
var px, py, pz, tempz;
px = dotArray[num].x;
py = dotArray[num].y;
pz = dotArray[num].z;
tempz = (pz*cos_ya)-(px*sin_ya);
dotArray[num].x = (pz*sin_ya)+(px*cos_ya);
dotArray[num].y = (py*cos_xa)-(tempz*sin_xa);
dotArray[num].z = (py*sin_xa)+(tempz*cos_xa);
}
____________________________________________________</P>
<>我的数学学得不好,难以理解其原理,各位大哥能解答我的疑惑吗?</P> |