#include <iostream>
#include <iomanip>
using namespace std;
#include <stdio.h>
#include <cmath> //#include <math.h>
/////////////////////////////////////////////////////////
//旋转包括某一点绕任轴旋转(x.y.z轴).
//这里讲得是空间任一点绕通过原点的任一轴旋转的程序
////////////////////////////////////////////////////////
void main()
{
int i,j,k;
double x,y,z,A;
double a[4][4]={{0,0,0,0}},b[4][4]={{0,0,0,0}},c[4][4]={{0,0,0,0}},d[4][4]={{0,0,0,0}};
cout<<"请输入旋转轴的方向向量:";
cin>>x>>y>>z;
//约束条件
while(x==0&&y==0&&z==0)
{
if(x==0&&y==0&&z==0)
{
cout<<" 请重新输入:";
cin>>x>>y>>z;
}
}
//输出原变换矩阵的过程
a[2][0]=x/(sqrt(x*x+y*y+z*z));
a[2][1]=y/(sqrt(x*x+y*y+z*z)); /*变换矩阵*/
a[2][2]=z/(sqrt(x*x+y*y+z*z));
if((x*x+y*y)!=0)
{
a[0][0]=-(y/sqrt(x*x+y*y));
a[0][1]=x/(sqrt(x*x+y*y));
a[0][2]=0;
}
else
{
a[0][0]=-(z/(sqrt(x*x+y*y)));
a[0][1]=0;
a[0][2]=x/(sqrt(x*x+y*y));
}
a[1][0]=a[0][3]*a[2][1]-a[0][1]*a[2][2];
a[1][1]=a[0][0]*a[2][2]-a[0][2]*a[2][0];
a[1][2]=a[0][1]*a[2][0]-a[0][0]*a[2][1];
for(j=1;j<4;j++)
{ a[4][j]=a[j][4]=0;
a[4][4]=1;}
a[0][3]=0;
a[1][3]=0;
a[2][3]=0;
a[3][0]=0;
a[3][1]=0;
a[3][2]=0;
a[3][3]=1;
cout<<"变换矩阵为:"<<endl;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout<<setw(15)<<a[i][j]<<" ";
}
cout<<"\n";
}
//输出转置后的矩阵过程
cout<<"则其转置矩阵如下:"<<endl;
for(i=0;i<4;i++)
for(j=0;j<4;j++) /*转置矩阵*/
b[j][i]=a[i][j];
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout<<setw(15)<<b[i][j]<<" ";
}
cout<<"\n";
}
//假设绕z轴旋转,变换后的矩阵如下:
cout<<"请输入要旋转的角度A:";
cin>>A;
cout<<"则变换矩阵为:"<<endl;
c[0][0]=cos(A);
c[0][1]=-sin(A); /*假设绕z轴旋转,矩阵如下*/
c[1][0]=sin(A);
c[1][1]=cos(A);
c[2][2]=1;
c[3][3]=1;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout<<setw(15)<<c[i][j]<<" ";
}
cout<<"\n";
}
//中间部分结果
for(i=0;i<4;i++) //矩阵相乘
for(k=0;k<4;k++)
for(j=0;j<4;j++)
d[i][k]+=b[i][j]*c[j][k];
/*for(i=0;i<4;i++)
{ //中间矩阵相乘的结果
for(j=0;j<4;j++)
{
cout<<setw(15)<<d[i][k]<<" ";
}
cout<<"\n";
} */
//输出旋转后的最终矩阵
cout<<"最后需输出的矩阵为:"<<endl;
for(i=0;i<4;i++) //矩阵相乘
for(k=0;k<4;k++)
for(j=0;j<4;j++)
b[i][k]+=d[i][j]*a[j][k];
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout<<setw(15)<<b[i][k]<<" ";
}
cout<<"\n";
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
空间任一点绕通过原点的任一轴旋转的程序.rar
共13个文件
pdb:2个
dsp:1个
exe:1个
4星 · 超过85%的资源 需积分: 10 32 下载量 157 浏览量
2009-02-03
16:56:14
上传
评论 2
收藏 1.05MB RAR 举报
温馨提示
旋转包括某一点绕任轴旋转(x.y.z轴). 这里讲得是空间任一点绕通过原点的任一轴旋转的程序
资源推荐
资源详情
资源评论
收起资源包目录
.rar (13个子文件)
任轴旋转
变换.cpp 3KB
变换.plg 242B
变换.ncb 41KB
变换.opt 581KB
Debug
vc60.pdb 132KB
vc60.idb 97KB
变换.exe 548KB
变换.obj 247KB
变换.ilk 786KB
变换.pdb 1.06MB
变换.pch 1.92MB
变换.dsp 3KB
变换.dsw 533B
共 13 条
- 1
资源评论
- yuanzhimu2014-06-27不错资料,对于搞数学建模,很好 .
- lichunding2014-06-08不错,有参考价值!
- chendd2013-02-28不错资料,对于搞数学建模,很好
- axpican2013-08-29有借鉴价值!
goontoend
- 粉丝: 13
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功