用笛卡尔公式绘图表白心形

实现效果:

 

代码段:

package 爱的告白;

//AWT技术画出游戏主窗口主要是进行窗口一些属性的设置,包括大小,可显示度,位置,和窗口监听,这些都是Java的内部类。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JFrame;

//JFrame是java.swing中的主要类,画的窗口都需要继承JFrame
public class Love extends JFrame {
	//定义窗口的大小
	private static final int WIDTH = 500;
	private static final int HEIGHT = 500;
	//获取屏幕大小
	//Toolkit.getDefaultToolkit().getScreenSize():得到你屏幕的分辨率的大小
	private static int WINDOW_WIDTH = Toolkit.getDefaultToolkit().getScreenSize().width;
	private static int WINDOW_HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().height;
	//Love类中的方法都是继承的JFrame,然后直接调用
	public Love() {
		//设置窗口的标题
		super("♥ I love you ♥");
		this.setBackground(Color.BLACK);
		//设置窗口居中位置(水平位置,垂直位置)
		this.setLocation((WINDOW_WIDTH-WIDTH)/2,(WINDOW_HEIGHT-HEIGHT)/2);
		//设置窗口大小
		this.setSize(WIDTH,HEIGHT);
		//设置窗口布局
		this.setLayout(getLayout());
		//设置窗口可见
		this.setVisible(true);
		//设置窗口默认关闭方式
		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
	}
//	如果要在窗口中画图或者显示什么内容,我们需要重写paint(Graphics g)方法。 
//	这个方法的作用是:画出整个窗口及其内部内容。它会被系统自动调用。我们自己不需要去调用这个方法。
//	Graphics对象,我们可以把它想象成“一支画笔”,窗口中的图形都由这支“画笔”画出来的。
//	画出每个图形都需要指定图形所在“矩形区域”的位置和大小。
	public void paint(Graphics g) {
		//横纵坐标以及半径
		double x,y,r;
		//声明图像变量
		Image image = this.createImage(WIDTH, HEIGHT);
		Graphics pic = image.getGraphics();
		for(int i = -2;i < 90; i++) {
			//笛卡尔数学公式:(x*x+y*y-2ax)2=4a*a(x*x+y*y)
			for(int j = -2;j < 90;j++) {
				//Math.sin()表示返回角的三角正弦;Math.cos()表示返回角的三角余弦
				//转换为直角坐标系,设置偏移量,使图像居中
				//Math.PI:圆的周长与直径的比例
				//Math.PI=π≈3.14159
				r = Math.PI/45 + Math.PI/45*i*(1-Math.sin(Math.PI/45*j))*18;
				x = r*Math.cos(Math.PI/45*j)*Math.sin(Math.PI/45*i) + WIDTH/2;
				y = -r*Math.sin(Math.PI/45*j) + HEIGHT/3;
				//图片的颜色为紫红色
				pic.setColor(Color.MAGENTA);
				//用当前颜色填充外接指定矩形框的椭圆
				pic.fillOval((int)x,(int)y,2,2);
				/*
				 * x 要填充椭圆的左上角的 x 坐标
				 * y 要填充椭圆的左上角的 y 坐标
				 * width 要填充椭圆的宽度
				 * height 要填充椭圆的高度
				 */
			}
			//生成图片
			g.drawImage(image,0,0,this);
		}
	}
	//Thread类的sleep方法再调用时必须声明抛出InterruptedException
	public static void main(String[] args) throws InterruptedException {
		//运用for循环使其有个动态效果
		 for (int i = 0; i < 3; i++) {
	            new Love();
	            //这个函数使画面维持两秒
	            Thread.sleep(2000);
		 }
	}
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以帮你解决这个问题。要输出笛卡尔的爱心形函数图像,需要使用 Java绘图库,比如 JavaFX 或者 Swing。 下面是一个使用 JavaFX 绘制笛卡尔的爱心形函数的示例代码: ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.stage.Stage; public class HeartFunction extends Application { private static final int WIDTH = 600; private static final int HEIGHT = 600; private static final int SCALE = 100; @Override public void start(Stage primaryStage) throws Exception { Canvas canvas = new Canvas(WIDTH, HEIGHT); GraphicsContext gc = canvas.getGraphicsContext2D(); gc.setFill(Color.RED); double x, y, r; for (double t = 0; t <= 2 * Math.PI; t += 0.01) { r = 16 * Math.pow(Math.sin(t), 3); x = SCALE * r * Math.cos(t) + WIDTH / 2; y = -SCALE * r * Math.sin(t) + HEIGHT / 2; gc.fillOval(x, y, 2, 2); } StackPane root = new StackPane(canvas); primaryStage.setScene(new Scene(root, WIDTH, HEIGHT)); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` 这个示例代码中,使用 for 循环遍历一个圆的所有点,计算出每个点的 x 和 y 坐标,然后使用 `fillOval` 方法在对应的位置上画一个小圆点,最终得到爱心形函数的图像。其中,参数 `SCALE` 用来控制图像的大小,可以根据需要调整。 希望这个示例能够帮到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫没有猫耳朵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值