三角形旋转移动——沿正弦曲线移动
基于EasyX图形库
#include<iostream>
#include<graphics.h>
#include<math.h>
#include <windows.h>
#define PI 3.14
double pc[3][3]={-40,165,1,
75,215,1,
5,245,1};
int x=0,y=0,n=1;
using namespace std;
void CreatTriangle()
{
for(int i=0; i<3; i++)
line( pc[i%3][0], pc[i%3][1], pc[(i+1)%3][0], pc[(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]=pc[i][0]*T[0][j]+pc[i][1]*T[1][j]+pc[i][2]*T[2][j];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
pc[i][j]=PNew[i][j];
}
void Play()
{
double T1[3][3],T2[3][3],T3[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-200;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;
if(n==1){x+=5;y+=10*sin(x*PI/180);}
else{x-=5;y-=10*sin(x*PI/180);}
if(x>1200 || x<0)n=-n;
T3[0][0]=1;T3[0][1]=0;T3[0][2]=0;
T3[1][0]=0;T3[1][1]=1;T3[1][2]=0;
T3[2][0]=x;T3[2][1]=y+200;T3[2][2]=1;
MultiMatrix(T1);
MultiMatrix(T2);
MultiMatrix(T3);
CreatTriangle();
Sleep(30);
cleardevice();
}
int main()
{
initgraph(1200, 600,SHOWCONSOLE);
while(1){
Play();
}
getchar();
closegraph();
return 0;
}