本文是有關二維,三維坐標旋轉算法筆記。
1.二維坐標旋轉。二維坐標旋轉公式圖下:
void Rotate2(double x1, double y1, double alpha, double& x2, double& y2) { x2 = x1 * cos(alpha) - y1 * sin(alpha); y2 = x1 * sin(alpha) + y1 * cos(alpha); }
2.三維坐標旋轉
在處理三維坐標旋轉時,使用標准的數學公式是沒有問題的。但是把二維坐標旋轉調用三次,也能夠實現三維坐標的旋轉,而且有易讀易懂,処理速度快的長處。
void Rotate3(double x1, double y1, double z1, double alphaX,double alphaY,double alphaZ, double& x2, double& y2, double& z2) { //Z Axis Rotation double x3 = x1 * cos(alphaZ) - y1 * sin(alphaZ); double y3 = x1 * sin(alphaZ) + y1 * cos(alphaZ); double z3 = z1; //Y Axis Rotation double z4 = z3 * cos(alphaY) - x3 * sin(alphaY); double x4 = z3 * sin(alphaY) + x3 * cos(alphaY); double y4 = y3; //X Axis Rotation y2 = y4 * cos(alphaX) - z4 * sin(alphaX); z2 = y4 * sin(alphaX) + z4 * cos(alphaX); x2 = x4; }