我有以下 c++ 程序。我必须以逆时针方向以某个角度围绕某个点旋转一个三角形。我通过以下代码实现了这一点。我的逻辑是,首先我输入发生旋转的点、旋转角度,然后输入三角形的坐标。之后我应用了矩阵公式
M(final coordinates)=M(translate triangle to original position)*M(Rotate triangle)*M(translate triangle to origin)*M(original coordinates)
其中M是指上式中的矩阵。
通过以相反的顺序将这些矩阵相乘 <-- 有人得到了结果。
但是当我运行这段代码时,程序会导致异常终止。
我的代码是:
#include<iostream.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
#define pi 3.14159265
void rotation(float tx,float ty,float redi,float t[][3])
{
clrscr();
int g=DETECT,gm;
initgraph(&g,&gm,"C:\\TC\\BGI");
setbkcolor(8);
int i,j,k;
float x[3][3],c[3][3],r[3][3],mf[3][3],res[3][3];
for(j=0;j<3;j++)
{
for(k=0;k<3;k++)
{
if(j==k)
{
r[j][k]=1;
x[j][k]=1;
}
else
{
r[j][k]=0;
x[j][k]=0;
}
}
}
float co,si;
co=cos(redi);
si=sin(redi);
r[0][0]=co; r[0][1]=-si; r[1][0]=si; r[1][1]=co;
x[0][2]=-tx;
x[1][2]=-ty;
for(int mat=0;mat<3;mat++)
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(mat==0) c[i][j]=0;
if(mat==1) mf[i][j]=0;
if(mat==2) res[i][j]=0;
for(k=0;k<3;k++)
{
if(mat==0)
c[i][j]+=r[i][k]*x[k][j];
if(mat==1)
{
x[0][2]=tx;
x[1][2]=ty;
mf[i][j]+=x[i][k]*c[k][j];
}
if(mat==2)
res[i][j]+=mf[i][k]*t[k][j];
}
cout<<res[i][j];
}
}
}
line(res[0][0],res[1][0],res[0][1],res[1][1]);
line(t[0][0],t[1][0],t[0][1],t[1][1]);
line(res[0][2],res[1][2],res[0][1],res[1][1]);
line(t[0][2],t[1][2],t[0][1],t[1][1]);
line(res[0][2],res[1][2],res[0][0],res[1][0]);
line(t[0][2],t[1][2],t[0][0],t[1][0]);
for(i=0;i<3;i++)
{
putpixel(res[0][i],res[1][i],RED);
putpixel(t[0][i],t[1][i],RED);
}
closegraph();
getch();
}
void main()
{
clrscr();
float tx,ty,t[3][3];
float deg,redi;
cout<<"Rotation about point : ";
cin>>tx>>ty;
cout<<"Enter angle of rotation :";
cin>>deg;
for(int i=0;i<3;i++)
{
cout<<"Enter co-ordintes "<<i+1<<" of triangle: ";
for(int j=0;j<3;j++)
{
if(j==2)
t[j][i]=1;
else
cin>>t[j][i];
}
}
redi=(deg*pi)/180.0;
rotation(tx,ty,redi,t);
getch();
}
我正在使用 TC++ IDE。请帮忙......