旋转四面体的c语言函数 制作一个旋转的正四面体( 九 )


a[sy][sx] = a[y][x];
return;
} else {
myturn(a, dx, dy, sx, sy);
a[dy][dx] = val;
}
}
void turn90(int a[N][N])
{
int s = 0, e = N - 1;
int i;
int l = 0;
while(se) {
for(i = s; ie; ++i)
myturn(a, i, l, i, l);
++l;
++s;
--e;
}
}
int main()
{
int a[N][N] = {1,2,3,4,5, 6,7,8,9,10,
11,12,13,14,15, 16,17,18,19,20, 21,22,23,24,25};
int i, j;
turn90(a);
for(i = 0; iN; ++i) {
for(j = 0; jN; ++j)
printf("%d\t", a[i][j]);
putchar('\n');
}
return 0;
}
求一个C语言图形变换程序,先进行图形绘制,后能进行图形复制、移动、缩放、旋转,跪求啦 。。。从这一部分开始,进入了图形编程的比较烦琐的部分 , 要真正对图形编程有所了解 , 这一部分的内容是必须要掌握的 。
在计算机绘图过程中,经常需要进行绘图变换,主要包括二维图形变换和三维图形变换 。这一部分讨论二维图形变换,其内容有用户坐标到屏幕坐标的变换、图形的比例变换、对称变换、错切变换、旋转变换、平移变换和复合变换等 。后面讲到了二维剪裁,即线段裁剪与多边形裁剪 。
第一节用户坐标到屏幕坐标变换
假设纸上有一个图形,要用计算机把它在屏幕上画出来 。那么首先遇到的问题是 , 纸上的图形采用的坐标是实数域域中的直角坐标系或是极坐标系,统称为用户坐标系 。而屏幕上采用的坐标系是整数域中直角坐标系 , 这类坐标系统称为设备坐标系 。因此用户坐标系中图形需要经过变换才能绘制在屏幕上,显然这个变换的内容包括: 1)将用户坐标系中任意范围区域转换到屏幕某个范围区域 , 从而用户坐标系此范围区域内的图形也转换到屏幕上该范围区域内 。2)用户坐标系此区域内图形上的坐标值转换到屏幕上该范围区域内后不一定是整数,取整后才成为该范围区域内的屏幕坐标值 。3)用户坐标右手系到屏幕坐标左手系的坐标轴方向变换 。4)当屏幕坐标系水平方向与垂直方向刻度不等(即像素间距不等)时,为保持图形不走样,还要进行比例变换 。下面介绍这些内容的具体计算问题 。
1.窗口到视口的变换
更确切地说,是实际图形到屏幕图形的转换 。有时也称为数据规格化 。
在用户坐标系中,指定一矩形域以确定要显示(或绘制)的图形部分,这个矩形区域称为窗口 。在屏幕上可任选一矩形域以显示(或绘制)窗口内的图形,该域称为视口 。如图2-1所示 。
一般视窗口的四条边界分别为:
左边界 x=x1、右边界 x=x2.下边界 y=y1,上边界y=y2 。
视口的四条边界分别为:
左边界sx=sx1,右边界sx=sx2,上边界sy=sy1,下边界sy=sy2 。
经变换后应有,窗口的上边界线段(或下边界线段)长x2-x1变换成视口上边界线段(或下边界线段)长sx2-sx1 。设其比例变换因子为k1 , 则可得
k1*(x2-x1)=sx2-sx1
k1=(sx2-sx1)/(x2-x1)
对窗口内任一x坐标(x1=x=x2)变换后为视口内水平方向sx坐标(sx1=sx=sx2) 。由上述有:
k1*(x-x1)=sx-sx1
sx=sx1+k1*(x-x1)
=sx1+(x-x1)*(sx2-sx1)/(x2-x1)
同样 , 经变换后窗口的左边界线段(或右边界线段)长y2-y1变换成视口左边界线段(或右边界线段)长sy2-sy1 。设其比例变换因子为k2 , 则可得
k2*(y2-y1)=sy2-sy1
k2=(sy2-sy1)/(y2-y1)
对窗口内任一y坐标(y1=y=y2)变换后为视口内垂直sy坐标(sy1=sy=sy2),应有
k2*(y-y1)=sy-sy1
sy=sy1+k2*(y-y1)
=sy1+(y-y1)*(sy2-sy1)/(y2-y1)
于是对窗口内图形上任一点坐标(x,y)变换到屏幕上视口内成为(sx,sy) , 则

推荐阅读