没想到吧 代码也画画

安全维护

挑战题目

如何用线条绘制一个心形图形?

图形编程是一门程序和数学结合得比较紧密的分支,屏幕显示就是该技术最主要的应用。在该领域中,通过使用一些数学知识可以实现很多奇妙的功能,而这些功能也在实际的项目中获得了广泛的应用。

本期题目:下图中的图形像不像天空中远去的鸟儿,你会编程画出它吗?

27-g13-1.jpg

看到这样的图形,很快就可以发现它存在一定的规律。不错!是左右对称图形。有规律的图形,可以使用直线、抛物线等来设计,这需要用到数学函数、数学公式等——很多3D特效都用到它们。如果是不规则的图形,则需要记忆该图形中的每个点,再绘制图形,例如利用软件生成股市K线图就用到这种方法。这种方式比较简单,但在功能上受到一定的限制。

利用余弦函数绘制图形

仔细观察,就可以发现图形比较像余弦曲线与反余弦曲线的组合,利用cos(x)公式就可以绘制出题目要求的图形。代码如下所示:

#include

#include

void main()

{

double y;

int x,m;

for(y=1;y>=-1;y-=0.1) /*y为列方向,值从1到-1,步长为0.1*/

{

m=acos(y)*10; /*计算出y对应的弧度m,乘以10为图形放大倍数*/

for(x=1;x

printf("*"); /*控制打印左侧的 * 号*/

for(;x<62-m;x++)printf(" ");

printf("*\n"); /*控制打印同一行中对称的右侧*号*/

}

}

取坐标绘制图形

虽然图形有规律,但每个星号之间的间距是没有规则的,所以通过确定特征点坐标绘制图形也是一个方法。绘制方法如下所示:

第一步:用具备坐标显示功能的软件提取图形每个星号的坐标,将坐标存储在数组中。

int position[][] = {{0,14}, {16,22}, {26,32}, {36,40}, {42,50},{48,62},

{54,70}, {60,82}, {66,90}, {70,98}, {75,106}, {80,115},

{85,125}, {91,134}, {96,144}, {103,153}, {112,163}, {116,171},

{122,181}, {133,191}, {156,200}, {179,191}, {190,181}, {196,171},

{200,163}, {209,153}, {216,144}, {221,134}, {227,125}, {232,115},

{237,106}, {242,98}, {246,90}, {252,82}, {256,70}, {262,62},

{268,50}, {276,40}, {286,32}, {296,22}, {312,14},

};

数组中position[i][0]存储X坐标,position[i][1]存储Y坐标。在NetBeans中点击“文件→新建项目菜单”,新建一个ShapeArtist项目。

第二步:再点击“文件→新建项目菜单”,在打开的新建文件窗口中,选择MIDP-MIDlet,输入MIDlet类名为ShapeArtistMidlet,设置包名为com.javamestudio.shapeartist.midlet。在ShapeArtistMidlet类中新增一个默认的构造方法,代码如下所示:

public ShapeArtistMidlet(){

Display.getDisplay(this).setCurrent(new ShapeArtistCanvas());

}

第三步:输入MIDP类名为ShapeArtistCanvas,设置包名为com.javamestudio.shapeartist.ui。在ShapeArtistCanvas类的paint方法中新增绘制的代码即可,代码如下所示:

public void paint(Graphics g) {

//清屏

g.setColor(0xffffff);

g.fillRect(0, 0, getWidth(), getHeight());

g.setColor(0);

//依次绘制

for(int i = 0;i < position.length;i++){

g.drawChar('*', position[i][0], position[i][1], Graphics.TOP | Graphics.LEFT);

}

}

开发中的图形编程

在实际的项目开发中,图形编程被广泛使用,例如Word中同一个字体显示不同大小的字。在特定的字体文件中存储着每个文字的特征点信息,专业的说法称为点阵,然后将点阵位置显示在屏幕上。

在生活中,我们也可以看到图形编程的影子。例如各种广告招牌闪烁的内容,就是将内容转换为具体的特征点,然后通过这些点控制广告牌中各位置的灯的开启与关闭,制造出各种特效从而使城市的夜空出现了迷人的霓虹灯景观。