利用java打印心型图案

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

利用java打印心型图案_第1张图片

问题分析

心形图案的实现,重点是心形函数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); 
	   } 
	} 

更标准的心形

利用java打印心型图案_第2张图片

你可能感兴趣的:(【Java基础】)