收藏 分享(赏)

几个图形1.doc

上传人:myw993772 文档编号:6946843 上传时间:2019-04-28 格式:DOC 页数:4 大小:20.50KB
下载 相关 举报
几个图形1.doc_第1页
第1页 / 共4页
几个图形1.doc_第2页
第2页 / 共4页
几个图形1.doc_第3页
第3页 / 共4页
几个图形1.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、一、用画圆函数作的心形图案#include#include#include#include#define PI 3.1415926void main()int x,y,y1,r,r1;double a;int gdriver=DETECT,gmode;initgraph(printf(“Input Radus(0-79)n“);scanf(“%d“,y1=240-r;cleardevice();setbkcolor(WHITE);setcolor(RED);for(a=0;adiv align=left-二、希奇的人脸 (下 载源代码 ) 这幅图象不象一张古怪的人脸,当然,作为人脸来看,它太丑

2、陋了,但是作为一幅三维彩色图象,它却具有一种希奇的吸引力。这是通过分形技术生成的图象,通过调用我们开发的数学模块和图形模块,这种图象具有震撼的效果,一点不比用其它绘图工具用出来的图形差。为了生成复杂而漂亮的图案,我们需要做两方面的工作,一个是直接控制显示的颜色,即让显示的颜色达到 256 色,只有这样,才能使生成的图案具有丰富的色彩效果。另一个就是采用分型技术,通过简单的数学公式迭代,生成的图案就会具有复杂而自然的几何外型。为了实现第一个目的,开发了一些专用的图形函数,放在头文件 graph.inc 中,以后绘图程序都将其包含进去,而无须如前面那样包含头文件 graphics.h。和 BGI

3、提供的graphics.h 相比,这里开发的 graph.inc 还包含初始化 256 色显示,设置调色板和清除调色板等;还有一些计算显示信息的数学函数,利用该头文件不仅可以得到十分丰富的 256 色,而且还可以减少绘图时的计算量,从而提高绘图时的速度。为了实现第二个目的,即采用分形技术,这里也要开发一些数学函数,放在头文件math.inc 中,它不仅包含标准函数库中未提供的许多函数,也包括生成和操作三维矢量的一些完整程序,从而大大简化了图形程序的编制,可以轻松地生成具有三维效果的图形。分形技术是生成复杂图形时经常采用的一种技术,它的核心思想其实就是数学公式的迭代。先任意定出某几个像素的位置和

4、颜色,一直迭代到像素布满整个区域时为止。数学公式的变换具有奇异的效果,下面结合程序来介绍。程序代码如下:#include#include#include#include#include /*包含自己开发的数学模块*/#include /*包含图形模块*/init GetPixel3D(int x,int y,int z) /*定位屏幕上的坐标位置,并检索颜色*/int xp,yp;MapCoordinates(x,y,z,return(GetPixel(xp,yp);#define xxmin -2#define xxmax 2#define yymin -2#define zzmax 2#d

5、efine res 200#define a 2.24#define b 0.43#define c -0.65#define d -2.43#define e 1.00float xinc,yinc,zinc;float x,y,z,xx,yy,zz;int xxx,yyy,zzz,col,pix;void main()Initperspective(false,0,0,500,500); /*说明透视图的参量*/Initplotting(240,18); /*初始化三维绘图中的参量*/InitGraphics(); /*开启图形工作模式*/xinc=res/(xxmax-xxmin); /

6、*初始化迭代参数*/yinc=res/(yymax-yymin);zinc=res/(zzmax-zzmin);x=0;y=0;z=0;while(!(kbhit() /*等待按键无限循环*/xx=sin(a*y)-z*cos(b*x); /*开始迭代算法*/yy=z*sin(c*x)-cos(d*y);zz=e*sin(x);x=xx;y=yy;z=zz;xxx=Round(xx*xinc);yyy=Round(yy*yinc);zzz=Round(zz*zinc);col=(xxx+XRes/s)%251; /*得到待显示像素的颜色*/pix=GetPixel3D(xxx,yyy,zzz)

7、; /*定位屏幕上坐标位置*/if(colpix)CartesianPlot3D(xxx,yyy,zzz,col); /*把三维信息转换为二维信息在屏幕上画点*/ExitGraphics(); /*结束图形显示方式*/程序分析:这里采用的分型技术调用的数学公式如下:x(n+1)=Sin(a*(Y(n)-Z(n)*Cos(b*X(n)y(n+1)=Z(n)*Sin(c*X(n)-Cos(d*Y(n)Z(n+1)=c*Sin(X(n)屏幕上显示的图形即为该三维动态系统在二维系统上的投影。程序一开始定义了一些常量,包括公式中的系数以及三个坐标的最大值和最小值,然后程序调用了头文件 graph.inc

8、 中的一些初始化函数,如 Initperspective()和 InitPloting()以及InitGraphics()进入图形显示方式。接着,程序设置用来把 x,y 和 z 转换为屏幕像素坐标的因子,三个坐标都被初始化为 0。该程序接着开始一个 Do 循环,该循环将一直重复,直到按下一个键为止。这样,显示将不断增加点数使图形密度不断增加,直到用户想终止它为止。每次循环迭代,程序都生成新的 x,y 和 z 值,它然后把这些值转换为三维屏幕像素的坐标,之后该函数使用像素坐标的 x 值生成一个颜色值。该程序然后使用 Getpixel3D 定位在屏幕上该坐标位置,并检索此处像素的颜色。该过程首先调

9、用函数 MapCoodinates 从一个三维坐标生成二维屏幕坐标,然后调用函数 Getpixel读屏幕上该位置像素的颜色。然后,假如被生成颜色的号比该像素比已有颜色像素的号高,这个颜色就在屏幕上画出。起初,该过程可能不明显,该颜色被选择,从而使它的号码随着三维系统中 x 坐标的增加而增加。当三维坐标投影到二维坐标时,可能会出现几个不同的三维位置投影到同一个二维位置,当出现这一情况时,我们使该二维位置的颜色为最接近的一个三维位置的颜色,因为它是我们实际看到的颜色。在按下一个键前,它将不断迭代,从而不断增加显示的复杂程度,有键按下时,程序调用函数 ExitGraphics 离开图形工作模式,然后终止。本文章来自 21 视频教程网 几个图形(01)_C 语言程序设计教程 原文链接:http:/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报