C++ 三角形变大缩小旋转移动——左上角到右下角
基于EasyX图形库
#include<iostream>
#include<graphics.h>
#include<math.h>
#include <windows.h>
#define PI 3.14
double p[3][3];
double pc[3][3]={-25,-25,1,
5,30,1,
30,5,1};
int x=0,y=0,n=1;
using namespace std;
void CreatTriangle()
{
for(int i=0; i<3; i++)
line( p[i%3][0], p[i%3][1], p[(i+1)%3][0], p[(i+1)%3][1] );
}
void MultiMatrix(double T[3][3])
{
int i,j;
double PNew[3][3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
PNew[i][j]=p[i][0]*T[0][j]+p[i][1]*T[1][j]+p[i][2]*T[2][j];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
p[i][j]=PNew[i][j];
}
void Play()
{
double T1[3][3],T2[3][3],T3[3][3],T4[3][3];
int i,j;
T1[0][0]=1;T1[0][1]=0;T1[0][2]=0;
T1[1][0]=0;T1[1][1]=1;T1[1][2]=0;
T1[2][0]=-x;T1[2][1]=-y;T1[2][2]=1;
T2[0][0]=cos(10*PI/180);T2[0][1]=-sin(10*PI/180);T2[0][2]=0;
T2[1][0]=sin(10*PI/180);T2[1][1]=cos(10*PI/180);T2[1][2]=0;
T2[2][0]=0;T2[2][1]=0;T2[2][2]=1;
T3[0][0]=(1+((300-abs(x-300))/60));T3[0][1]=0;T3[0][2]=0;
T3[1][0]=0;T3[1][1]=(1+((300-abs(x-300))/60));T3[1][2]=0;
T3[2][0]=0;T3[2][1]=0;T3[2][2]=1;
if(n==1){x+=5;y+=5;}
else{x-=5;y-=5;}
if(x>600 || x<0)n=-n;
T4[0][0]=1;T4[0][1]=0;T4[0][2]=0;
T4[1][0]=0;T4[1][1]=1;T4[1][2]=0;
T4[2][0]=x;T4[2][1]=y;T4[2][2]=1;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
p[i][j]=pc[i][j];
MultiMatrix(T1);
MultiMatrix(T2);
double P[3][3];
for(i=0; i<3; i++)
for(j=0;j<3;j++)
P[i][j]=p[i][0]*T4[0][j]+p[i][1]*T4[1][j]+p[i][2]*T4[2][j];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
pc[i][j]=P[i][j];
MultiMatrix(T3);
MultiMatrix(T4);
CreatTriangle();
Sleep(50);
cleardevice();
}
int main()
{
initgraph(600, 600,SHOWCONSOLE);
while(1){
Play();
}
getchar();
closegraph();
return 0;
}