首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

二维和三维空间向量的旋转

2013-03-16 
二维和三维向量的旋转二维向量旋转:二维向量旋转代码:?????????????x2(y2z2)cosθx2y2z2yx(1?cosθ)x2y2z2z

二维和三维向量的旋转


二维向量旋转:

二维和三维空间向量的旋转

二维向量旋转代码:



=?????????????x2+(y2+z2)cosθx2+y2+z2yx(1?cosθ)x2+y2+z2+zsinθx2+y2+z2??????????√zx(1?cosθ)x2+y2+z2?ysinθx2+y2+z2??????????√xy(1?cosθ)x2+y2+z2?zsinθx2+y2+z2??????????√y2+(z2+x2)cosθx2+y2+z2zy(1?cosθ)x2+y2+z2+xsinθx2+y2+z2??????????√xz(1?cosθ)x2+y2+z2+ysinθx2+y2+z2??????????√yz(1?cosθ)x2+y2+z2?xsinθx2+y2+z2??????????√z2+(x2+y2)cosθx2+y2+z2?????????????

三维向量旋转代码:


#include<iostream>#include<cstdio>#include<math.h>#include<string.h>#define PI acos(-1.0)#define eps 1e-8#define N 1000using namespace std;struct point3{double x,y,z;}p[N];int n;//求三维空间上一点q绕 向量(x0,y0,z0)正向旋转ang 弧度的点,向量起点在原点point3 rotate3(point3 q,double x0,double y0,double z0,double ang){double x2=x0*x0;double y2=y0*y0;double z2=z0*z0;double d2=x2+y2+z2;double d=sqrt(d2);double sina=sin(ang);double cosa=cos(ang);point3 ans;ans.x=(x2+(y2+z2)*cosa)/d2*q.x+ (x0*y0*(1-cosa)/d2 - z0*sina/d )* q.y+ (x0*z0*(1-cosa)/d2+y0*sina/d)*q.z;ans.y=(y0*x0*(1-cosa)/d2+z0*sina/d)*q.x + (y2+(x2+z2)*cosa)/d2* q.y+ (y0*z0*(1-cosa)/d2-x0*sina/d)*q.z;ans.z=(z0*x0*(1-cosa)/d2 - y0*sina/d)*q.x+ (z0*y0*(1-cosa)/d2+x0*sina/d)*q.y + (z2+(x2+y2)*cosa)/d2*q.z;return ans;}int main(){#ifndef Online_Judgefreopen("in.txt","r",stdin);#endifwhile(scanf("%d",&n)!=EOF){int i;for(i=0;i<n;i++)scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].z);double x0=0,y0=0,z0=1;double ang=PI/4.0;for(i=0;i<n;i++)p[i]=rotate3(p[i],x0,y0,z0,ang);for(i=0;i<n;i++)printf("%.8lf %.8lf %.8lf\n",p[i].x,p[i].y,p[i].z);}return 0;}/*in:80 0 01 -1 02 0 01 1 00 0 11 -1 12 0 11 1 1out:0.00000000 0.00000000 0.000000001.41421356 -0.00000000 0.000000001.41421356 1.41421356 0.000000000.00000000 1.41421356 0.000000000.00000000 0.00000000 1.000000001.41421356 -0.00000000 1.000000001.41421356 1.41421356 1.000000000.00000000 1.41421356 1.00000000*/


热点排行