专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »C语言教程 » 图形天下:几个图形(01) »正文

图形天下:几个图形(01)

来源: 发布时间:星期四, 2008年9月25日 浏览:99次 评论:0
一、用画圆函数作的心形图案
#include<stdio.h>
#include<graphics.h>
#include<math.h>
#include<conio.h>
#definePI3.1415926
voidmain()
{
intx,y,y1,r,r1;
doublea;
intgdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"\\\\tc\\\\bgi");
printf("InputRadus(0--79)\\n");
scanf("%d",&r);
y1=240-r;
cleardevice();
setbkcolor(WHITE);
setcolor(RED);
for(a=0;a<2*PI;a+=PI/18)
{
x=r*cos(a)+320;
y=r*sin(a)+240;
r1=sqrt((x-320)*(x-320)+(y-y1)*(y-y1));
circle(x,y,r1);
}
getch();
closegraph();
}
程序分析:
本程序在for循环中,将一个圆分成n份,以等分点为圆心画圆,半径则选择为以等分点到定点(圆周上垂直直径上端点)的距离。这样作出来的即为一个心形图案。
程序运行结果如下:
InputRadus(0--79)
30





------------------------------------------------------

二、奇怪的人脸(下载源代码>>>>)





这幅图象不象一张古怪的人脸,当然,作为人脸来看,它太丑陋了,但是作为一幅三维彩色图象,它却具有一种奇怪的吸引力。这是通过分形技术生成的图象,通过调用我们开发的数学模块和图形模块,这种图象具有震撼的效果,一点不比用其它绘图工具用出来的图形差。
为了生成复杂而美丽的图案,我们需要做两方面的工作,一个是直接控制显示的颜色,即让显示的颜色达到256色,只有这样,才能使生成的图案具有丰富的色彩效果。另一个就是采用分型技术,通过简单的数学公式迭代,生成的图案就会具有复杂而自然的几何外型。
为了实现第一个目的,开发了一些专用的图形函数,放在头文件graph.inc中,以后绘图程序都将其包含进去,而无须如前面那样包含头文件graphics.h。和BGI提供的graphics.h相比,这里开发的graph.inc还包含初始化256色显示,设置调色板和清除调色板等;还有一些计算显示信息的数学函数,利用该头文件不仅可以得到十分丰富的256色,而且还可以减少绘图时的计算量,从而提高绘图时的速度。
为了实现第二个目的,即采用分形技术,这里也要开发一些数学函数,放在头文件math.inc中,它不仅包含标准函数库中未提供的许多函数,也包括生成和操作三维矢量的一些完整程序,从而大大简化了图形程序的编制,可以轻松地生成具有三维效果的图形。
分形技术是生成复杂图形时经常采用的一种技术,它的核心思想其实就是数学公式的迭代。先任意定出某几个像素的位置和颜色,一直迭代到像素充满整个区域时为止。数学公式的变换具有奇异的效果,下面结合程序来介绍。

程序代码如下:
#include<stdio.h>
#include<dos.h>
#include<conio.h>
#include<math.h>
#include<math.inc>/*包含自己开发的数学模块*/
#include<graph.inc>/*包含图形模块*/

initGetPixel3D(intx,inty,intz)/*定位屏幕上的坐标位置,并检索颜色*/
{
intxp,yp;
MapCoordinates(x,y,z,&xp,&yp);
return(GetPixel(xp,yp));
}

#definexxmin-2
#definexxmax2
#defineyymin-2
#definezzmax2
#defineres200
#definea2.24
#defineb0.43
#definec-0.65
#defined-2.43
#definee1.00

floatxinc,yinc,zinc;
floatx,y,z,xx,yy,zz;
intxxx,yyy,zzz,col,pix;

voidmain()
{
Initperspective(false,0,0,500,500);/*说明透视图的参量*/
Initplotting(240,18);/*初始化三维绘图中的参量*/
InitGraphics();/*开启图形工作模式*/
xinc=res/(xxmax-xxmin);/*初始化迭代参数*/

如果本文没有解决您的问题,请进老妖怪开发者社区提问

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: