暴
暴峰雨
/******************************************/
/* 旋转三角型(sanjiao.c) */
/* 郑岩峰 */
/******************************************/
#include<stdio.h>
#include<graphics.h>
#include<math.h>
#define pi 3.1415926
/* 定义新旧坐标 */
float oldxy[3][1],newxy[3][1],rarray[3][3];
/* 定义点的结构类型*/
typedef struct tagpoint
{
float x;
float y;
}point;
/*计算旋转向量矩阵*/
void rotatearray(float angle)
{
rarray[0][0]=cos(angle/180*pi);
rarray[0][1]=-sin(angle/180*pi);
rarray[0][2]=0;
rarray[1][0]=sin(angle/180*pi);
rarray[1][1]=cos(angle/180*pi);
rarray[1][2]=0;
rarray[2][0]=0;
rarray[2][1]=0;
rarray[2][2]=1;
/* printf("%f\n",rarray[2][0]); */
/* printf("%f\n",rarray[2][1]); */
/* printf("%f\n",rarray[2][2]); */
}
/*向量乘法函数*/
void arraymul(float a[3][3],float b[3][1])
{
int i,j;
for(i=0;i<=2;i++)
{
newxy[i][0]=0;
}
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
newxy[i][0]=newxy[i][0]+a[i][j]*b[j][0];
}
}
}
/*画三角型函数*/
void linesanjiao(point p[3])
{
line(200.00+p[0].x,200.00+p[0].y,200.00+p[1].x,200.00+p[1].y);
line(200.00+p[1].x,200.00+p[1].y,200.00+p[2].x,200.00+p[2].y);
line(200.00+p[2].x,200.00+p[2].y,200.00+p[0].x,200.00+p[0].y);
}
/*主函数*/
main()
{
int driver=DETECT,mode;
point temppoint[3];
int i,j;
float ang,tempangle,dangle;
/*初始化*/
initgraph(&driver,&mode," ");
cleardevice();
/*计算原三角型各顶点坐标*/
ang=-30.0;
for(i=0;i<=2;i++)
{
temppoint[i].x=100*cos(ang/180*pi);
temppoint[i].y=-100*sin(ang/180*pi);
ang=ang+120;
}
linesanjiao(temppoint);
/*输入旋转角度*/
printf("Please enter rotate angle:");
scanf("%f",&dangle);
/*画旋转后的三角型*/
rotatearray(dangle);
for(tempangle=0.0;tempangle<360.0;tempangle=tempangle+dangle)
{
rotatearray(dangle);
for(i=0;i<=2;i++)
{
oldxy[0][0]=temppoint[i].x;
oldxy[1][0]=temppoint[i].y;
oldxy[2][0]=1;
arraymul(rarray,oldxy);
temppoint[i].x=newxy[0][0];
temppoint[i].y=newxy[1][0];
}
linesanjiao(temppoint);
}
getch();
/*关闭*/
closegraph();
}
/* 旋转三角型(sanjiao.c) */
/* 郑岩峰 */
/******************************************/
#include<stdio.h>
#include<graphics.h>
#include<math.h>
#define pi 3.1415926
/* 定义新旧坐标 */
float oldxy[3][1],newxy[3][1],rarray[3][3];
/* 定义点的结构类型*/
typedef struct tagpoint
{
float x;
float y;
}point;
/*计算旋转向量矩阵*/
void rotatearray(float angle)
{
rarray[0][0]=cos(angle/180*pi);
rarray[0][1]=-sin(angle/180*pi);
rarray[0][2]=0;
rarray[1][0]=sin(angle/180*pi);
rarray[1][1]=cos(angle/180*pi);
rarray[1][2]=0;
rarray[2][0]=0;
rarray[2][1]=0;
rarray[2][2]=1;
/* printf("%f\n",rarray[2][0]); */
/* printf("%f\n",rarray[2][1]); */
/* printf("%f\n",rarray[2][2]); */
}
/*向量乘法函数*/
void arraymul(float a[3][3],float b[3][1])
{
int i,j;
for(i=0;i<=2;i++)
{
newxy[i][0]=0;
}
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
newxy[i][0]=newxy[i][0]+a[i][j]*b[j][0];
}
}
}
/*画三角型函数*/
void linesanjiao(point p[3])
{
line(200.00+p[0].x,200.00+p[0].y,200.00+p[1].x,200.00+p[1].y);
line(200.00+p[1].x,200.00+p[1].y,200.00+p[2].x,200.00+p[2].y);
line(200.00+p[2].x,200.00+p[2].y,200.00+p[0].x,200.00+p[0].y);
}
/*主函数*/
main()
{
int driver=DETECT,mode;
point temppoint[3];
int i,j;
float ang,tempangle,dangle;
/*初始化*/
initgraph(&driver,&mode," ");
cleardevice();
/*计算原三角型各顶点坐标*/
ang=-30.0;
for(i=0;i<=2;i++)
{
temppoint[i].x=100*cos(ang/180*pi);
temppoint[i].y=-100*sin(ang/180*pi);
ang=ang+120;
}
linesanjiao(temppoint);
/*输入旋转角度*/
printf("Please enter rotate angle:");
scanf("%f",&dangle);
/*画旋转后的三角型*/
rotatearray(dangle);
for(tempangle=0.0;tempangle<360.0;tempangle=tempangle+dangle)
{
rotatearray(dangle);
for(i=0;i<=2;i++)
{
oldxy[0][0]=temppoint[i].x;
oldxy[1][0]=temppoint[i].y;
oldxy[2][0]=1;
arraymul(rarray,oldxy);
temppoint[i].x=newxy[0][0];
temppoint[i].y=newxy[1][0];
}
linesanjiao(temppoint);
}
getch();
/*关闭*/
closegraph();
}
| 我们只不过是生命之网上的一股线绳,生活在离太阳最近的第3颗行星上,我们只有一个地球!One earth!
oicq:19906552 |
| 喜欢电影的朋友这来... |