//绕原点旋转角度无法确定旋转的方向,因而不能确定参量的输入
//所以巧物冲只实现了绕X,Y,Z轴旋转
//---------------------------------------------------------------------------
#include <iostream.h>
#include <math.h>
#pragma hdrstop
//---------------------------------------------------------------------------
class Vetor
{
public:
Vetor(void):x(0),y(0),z(0){}
Vetor(double dx, double dy, double dz):x(dx),y(dy),z(dz){}
Vetor(double dd):x(dd),y(dd),z(dd){}
Vetor(Vetor&a):x(a.x),y(a.y),z(a.z){}
~Vetor(){}
void Rotate(char, double)
//旋转: 1-绕X轴, 2-绕Y轴, 3-绕z轴旋转角(角度)
//右手螺旋法则为角度正方向
double abs(void)//取向量模
void display(void)//显示向量
Vetor&operator++(void)
{ this->x++this->y++this->z++
return (*this)
}
Vetor&operator--(void)
{ this->x--this->y--this->z--
return (*this)
}
Vetor operator++(int a)
{ Vetor temp(*this)
++*this
return temp
}
Vetor operator--(int a)
{ Vetor temp(*this)
--*this
return temp
}
friend Vetor operator+(Vetor, Vetor)
friend Vetor operator-(Vetor, Vetor)
private:
double x,y,z
}
#pragma argsused
int main(int argc, char* argv[])
{
Vetor Test
double x,y,z,c,a
cout<<"please input (x,y,z) in order(seperated by space): "
cin>>x>>y>>z
Test = Vetor(x,y,z)
Test.display()
cout<<"菜单:"<<endl
cout<<"\t1- 绕X轴旋转"<<endl
cout<<"\t2- 绕Y轴旋转"<<endl
cout<<"\t3- 绕Z轴旋转"<<endl
cout<<"请输入菜单孝歼号与旋转角度°(用空格分开): "
cin>>c>>a
Test.Rotate(c,a)
Test.display()
system("pause")
return 0
}
//---------------------------------------------------------------------------
void Vetor::Rotate(char Choice, double theta)
//旋转蚂配: 1-绕X轴, 2-绕Y轴, 3-绕z轴旋转角theta(角度)
//右手螺旋法则为角度正方向
{
double xp,yp,zp
theta *= 0.017453292519943295769236907684886
switch(Choice)
{
case 1:
xp=x
yp=cos(theta)*y-sin(theta)*z
zp=sin(theta)*y+cos(theta)*z
break
case 2:
xp=cos(theta)*x+sin(theta)*z
yp=y
zp=-sin(theta)*x+cos(theta)*z
break
case 3:
xp=cos(theta)*x-sin(theta)*y
yp=sin(theta)*x+cos(theta)*y
zp=z
break
default:
xp=x
yp=y
zp=z
}
x=xpy=ypz=zp
}
double Vetor::abs(void)//取向量模
{
return (sqrt(x*x+y*y+z*z))
}
void Vetor::display(void)//显示向量
{
cout<<"向量为: ("<<x<<","<<y<<","<<z<<")"<<endl
}
Vetor operator+(Vetor a, Vetor b)
{
return Vetor(a.x+b.x,a.y+b.y,a.z+b.z)
}
Vetor operator-(Vetor a, Vetor b)
{
return Vetor(a.x-b.x,a.y-b.y,a.z-b.z)
}
公式:y=kx(k=tana)
将点P(p,q)在矩阵的颂孝作用下变成了(﹣p,q),而点P(p,q)与点(﹣p,q)关于y轴对称,从而得到结论。=表示将点P(p,q)在矩阵的作用下变成了(﹣p,q)而点P(p,q)与点(﹣p,q)关于y轴对称则变换=的几何意义为关于y轴冲春反射变换。
应用领域
任意线性变换都可以用矩阵表示为易于野判稿计算的一致形式,并且多个变换也可以很容易地通过矩阵的相乘连接在一起。
线性变换不是唯一可以用矩阵表示的变换。R维的仿射变换与透视投影都可以用齐次坐标表示为RP维(即n+1维的真实投影空间)的线性变换。因此,在三维计算机图形学中大量使用着4x4的矩阵变换。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)