600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 利用java打印心型图案

利用java打印心型图案

时间:2022-01-09 08:11:10

相关推荐

利用java打印心型图案

利用java打印心型图案 落尘曦的博客--落尘曦的博客

问题分析

心形图案的实现,重点是心形函数r=a(1–sinθ),据说这是笛卡尔死前寄出的最后一封情书的内容,这里面隐藏着一个刻骨铭心的秘密:“一生只为等待能手绘这个函数给我的人”。心形函数要做直角坐标系转换,然后投影到xOy平面上,就可以调用画椭圆方法来实现画心形图案。

(1)确定程序框架

为了提高图像的显示效果,须采用双缓冲技术。首先初始化缓冲区,接着绘制图像,然后再显示在Applet窗口中。程序框架代码如下:

import java.applet.Applet;import java.awt.Color;import java.awt.Graphics;import java.awt.Image;public class First extends Applet{ int width, height; Image image; //缓冲区对象Graphics g1; public void init()//Applet初始化时调用{ setBackground(Color.black); //设置背景this.setSize(350, 310); width = getSize().width; //获得窗口宽度height = getSize().height; image = createImage(width, height); //创建图像对象g1 = image.getGraphics(); } public void paint(Graphics g)//绘图方法{ g1.clearRect(0, 0, width, height); g1.setColor(Color.blue); ....//显示缓存区的可变Image对象g.drawImage(image, 0, 0, this); } }

绘制图案

由前面的问题分析可知,心形函数为r=a(1–sinθ),要做直角坐标系转换,然后投影到xOy平面上,坐标确定下来后调用画椭圆方法来画心形图案上的点。程序代码如下:

for(int i = 0; i <= 90; i++) //控制横向变化for(int j = 0; j <= 90; j++)//控制竖向变化{ //转换为直角坐标double r = Math.PI / 45 * i * (1 - Math.sin(Math.PI / 45 * j)) * 18; double x = r * Math.cos(Math.PI / 45 * j) * Math.sin(Math.PI / 45 * i) + width / 2; //为了在中间显示,加了偏移量double y = -r * Math.sin(Math.PI / 45 * j) + height / 4;//为了在中间显示,加了偏移量g1.fillOval((int) x, (int)y, 2,2);//绘制点}

完整代码

import java.applet.Applet;import java.awt.Color;import java.awt.Graphics;import java.awt.Image;public class First extends Applet{ int width, height; Image image; //缓冲区对象Graphics g1; public void init()//Applet初始化时调用{ setBackground(Color.black); //设置背景this.setSize(350, 310); width = getSize().width; //获得窗口宽度height = getSize().height; image = createImage(width, height); //创建图像对象g1 = image.getGraphics(); } public void paint(Graphics g)//绘图方法{ g1.clearRect(0, 0, width, height); g1.setColor(Color.blue); for(int i = 0; i <= 90; i++) //控制横向变化for(int j = 0; j <= 90; j++)//控制竖向变化{ //转换为直角坐标double r = Math.PI / 45 * i * (1 - Math.sin(Math.PI / 45 * j)) * 18; double x = r * Math.cos(Math.PI / 45 * j) * Math.sin(Math.PI / 45 * i) + width / 2; //为了在中间显示,加了偏移量double y = -r * Math.sin(Math.PI / 45 * j) + height / 4;//为了在中间显示,加了偏移量g1.fillOval((int) x, (int)y, 2,2);//绘制点}//显示缓存区的可变Image对象g.drawImage(image, 0, 0, this); } }

更标准的心形

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。