这个算法是在网上找到的,用来计算三维坐标点绕中心点旋转后新的坐标位置,我把它用 JS 实现并做了一点改进,增加了中心点坐标:

function point(x,y,z){
    this.x = x;
    this.y = y;
    this.z = z;
}
function pointRotate(origin,angleX,angleY,angleZ,center){
    angleX = angleX%360;
    angleY = angleY%360;
    angleZ = angleZ%360;
    var oClone = new point(origin.x,origin.y,origin.z);
    if(angleX==0&&angleY==0&&angleZ==0){return oClone;}
    if(typeof(center)=='undefined'){center=new point(0,0,0);}
    var result = new point();
    oClone.x -= center.x;
    oClone.y -= center.y;
    oClone.z -= center.z;
    var sinX = Math.sin(angleX*Math.PI/180);
    var sinY = Math.sin(angleY*Math.PI/180);
    var sinZ = Math.sin(angleZ*Math.PI/180);
    var cosX = Math.cos(angleX*Math.PI/180);
    var cosY = Math.cos(angleY*Math.PI/180);
    var cosZ = Math.cos(angleZ*Math.PI/180);
    result.x = oClone.x*(cosY*cosZ-sinX*sinY*sinZ)-oClone.y*cosX*sinZ+oClone.z*(sinY*cosZ+sinX*cosY*sinZ);
    result.y = oClone.x*(cosY*sinZ+sinX*sinY*cosZ)+oClone.y*cosX*cosZ+oClone.z*(sinY*sinZ-sinX*cosY*cosZ);
    result.z = oClone.x*(-cosX*sinY)+oClone.y*sinX+oClone.z*cosX*cosY;
    result.x += center.x;
    result.y += center.y;
    result.z += center.z;
    return result;
}
参数说明:
origin:原始点坐标
angleX:绕 X 轴旋转的角度
angleY:绕 Y 轴旋转的角度
angleZ:绕 Z 轴旋转的角度
center:旋转中心点,默认 { x:0, y:0, z:0 }

做了一个简单的演示页面,为了更直观的展示,使用四个坐标点连成一个二维正方形,四个顶点就是旋转点:三维坐标旋转算法演示

其实挺基础的,上学的时候我算这个还挺厉害,但是现在毕业很多年了,我一顿能吃三碗饭。