矩阵的旋转反射 c++ 编程

矩阵的旋转反射 c++ 编程,第1张

//C++源代码

//绕原点旋转角度无法确定旋转的方向,因而不能确定参量的输入

//所以巧物冲只实现了绕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的矩阵变换。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12417573.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存