`

Java2D绘制五星红旗

    博客分类:
  • J2SE
阅读更多
/**  
 使用Java2D绘制五星红旗  
 五星红旗的绘制标准见百度百科: http://baike.baidu.com/view/5163.htm  
 注意: 该处对于第一颗小星的位置说明有误,应将“左五右十”改成“左十右五”  
 @author  Eastsun  
 @version 2008/10/17 1.0  
 */

package com.cn;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.GeneralPath;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class NationalFlag extends JPanel {

	private static final long serialVersionUID = 1L;
	public static void main(String[] args) {
		JFrame frame = new JFrame("五星红旗");
		frame.getContentPane().add(new NationalFlag(600));
		frame.pack();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
	/**
	 * 创建一个五角星形状. 该五角星的中心坐标为(sx,sy),中心到顶点的距离为radius,
	 * 其中某个顶点与中心的连线的偏移角度为theta(弧度)
	 * 
	 * @return pentacle 一个☆
	 */
	public static Shape createPentacle(double sx, double sy, double radius,
			double theta) {
		final double arc = Math.PI / 5;
		final double rad = Math.sin(Math.PI / 10) / Math.sin(3 * Math.PI / 10);
		GeneralPath path = new GeneralPath();
		path.moveTo(1, 0);
		for (int idx = 0; idx < 5; idx++) {
			path.lineTo((float)(rad * Math.cos((1 + 2 * idx) * arc)),(float) (rad
					* Math.sin((1 + 2 * idx) * arc)));
			path.lineTo((float)Math.cos(2 * (idx + 1) * arc), (float)Math.sin(2 * (idx + 1)
					* arc));
		}
		path.closePath();
		AffineTransform atf = AffineTransform.getScaleInstance(radius, radius);
		atf.translate(sx / radius, sy / radius);
		atf.rotate(theta);
		return atf.createTransformedShape(path);		
	}
	private int width, height;
	private double maxR = 0.15, minR = 0.05;
	private double maxX = 0.25, maxY = 0.25;
	private double[] minX = { 0.50, 0.60, 0.60, 0.50 };
	private double[] minY = { 0.10, 0.20, 0.35, 0.45 };
	/**
	 * 创建一个宽度为width的国旗
	 */
	public NationalFlag(int width) {
		this.width = width / 3 * 3;
		this.height = width / 3 * 2;
		setPreferredSize(new Dimension(this.width, this.height));
	}
	protected void paintComponent(Graphics g) {
		Graphics2D g2d = (Graphics2D) g;
		// 画旗面
		g2d.setPaint(Color.RED);
		g2d.fillRect(0, 0, width, height);
		// 画大☆
		double ox = height * maxX, oy = height * maxY;
		g2d.setPaint(Color.YELLOW);
		g2d.fill(createPentacle(ox, oy, height * maxR, -Math.PI / 2));
		// 画小★
		for (int idx = 0; idx < 4; idx++) {
			double sx = minX[idx] * height, sy = minY[idx] * height;
			double theta = Math.atan2(oy - sy, ox - sx);
			g2d.fill(createPentacle(sx, sy, height * minR, theta));
		}
	}

}


  • 大小: 6.8 KB
分享到:
评论

相关推荐

    Java2D画图项目【五星红旗、美国队长】

    在本项目中,开发者可能利用了上述Java2D的特性来绘制五星红旗的红色背景、五角星以及美国队长盾牌的蓝红相间图案和星星。通过精心设计和组合这些元素,实现了两个具有辨识度的卡通图案。这个项目不仅展示了Java2D的...

    Java绘制2D图形

    Java绘制2D图形是Java GUI编程中的一个重要部分,它允许开发者在屏幕上创建各种复杂的视觉元素。在本项目中,我们看到一个实现,它在构造的面板上随机绘制了20个图形,这些图形是由`MyShape`抽象类及其多个子类来...

    Java绘制2D学习文档

    Java绘制2D是Java编程语言中的一个重要组成部分,它允许开发者创建复杂的图形,包括矢量图形、位图图像以及动画。这个“Java绘制2D学习文档”涵盖了如何在Java环境中使用2D图形API来实现各种绘图功能的知识点。Java ...

    java2D Java Java Java

    总结一下,Java 2D是Java平台上用于2D图形绘制的重要工具,它提供了一整套的API,包括图形对象、颜色管理、文本渲染和图像处理等功能,使得开发者可以创建出功能丰富且视觉效果出众的Java应用程序。通过学习和熟练...

    java2D动画效果

    Java2D是一个用于在Java平台上进行2D图形和图像处理的API,它扩展了Java的基础绘图功能,提供了更高级别的图形绘制能力,包括路径、文本、图像以及复杂的变换和混合模式。在Java2D中实现动画主要是通过不断地重绘...

    HTML5 Canvas绘制五星红旗.docx

    4. 图形绘制:使用 `fill()`、`stroke()` 等方法来绘制图形,例如绘制五星红旗的星星和旗面。 下面是一个使用 HTML5 Canvas 绘制五星红旗的示例代码: ```html &lt;canvas id="canvas" width="400" height="266"&gt;&lt;/...

    JAVA2D程序资源

    Java 2D 是Java平台提供的一种强大的图形处理技术,它允许开发者创建复杂的2D图形、图像和文本。这个"JAVA2D程序资源"压缩包显然包含了一系列与Java 2D编程相关的材料,如可视化编程蓝图模型、文档以及由模型自动...

    java2d(中文教程)

    这个中文教程《JAVA 2D API 中文使用指南》将详细介绍上述知识点,并通过实例演示如何使用Java 2D API 实现各种图形绘制和效果。建议读者结合教程中的示例代码进行实践,以加深理解。在学习过程中,不断尝试和实验,...

    Java 2D API 中文使用指

    Java 2D API 是 Java 平台上的一个高级图形处理库,它为开发人员提供了绘制复杂图形的能力,包括线条、形状、图像等。通过 Java 2D,开发者可以轻松创建复杂的用户界面组件和动画效果。 ##### 1.1 Java 2D 的核心...

    Java 2D API 中文使用指南

    通过本指南,您将学习到如何使用Java 2D来绘制复杂的图形、处理图像以及实现各种图形效果。 #### 一、Java 2D API简介 Java 2D API主要包含以下几个部分: 1. **绘图与渲染**:这部分涵盖了如何在Java中绘制线条...

    经典的java2D 画图

    ### 经典的Java2D画图:绘制两朵花 在Java图形编程领域中,Java2D提供了强大的工具和API来实现复杂的图形界面。本文将详细介绍如何利用Java2D来绘制两朵非常好看的花,并深入探讨代码中的关键概念和技术细节。 ###...

    opengl1.zip_openGL 五星红旗_五星红旗

    在给定的“opengl1.zip”压缩包中,包含了使用OpenGL绘制五星红旗的源代码文件“opengl1.cpp”。这为我们提供了一个学习如何使用OpenGL来实现几何形状绘制和纹理映射的实际示例。 OpenGL的工作流程通常包括以下几个...

    JAVA2D 相关教程 word文档

    - **基本模型**:Java 2D API保持了原有的图形绘制模型,即设置图形上下文后调用Graphics对象的绘制方法。Graphics2D扩展了Graphics,增加了更多图形属性和绘制方法。 - **设备无关性**:Java 2D API自动补偿不同...

    Java2D Demo

    Java2D Demo是官方提供的示例集合,展示了如何使用Java2D API来实现各种图形绘制和效果。 在Java2DTest这个压缩包中,我们可以期待找到一系列的Java源代码文件,这些文件包含了Java2D的各种示例代码。通过学习和...

    JSP与Java2D Web图表编程

    Java2D是Java平台提供的用于绘制高质量二维图形的功能库。与AWT相比,Java2D提供了更加强大、灵活且独立于设备分辨率的图形处理能力。Java2D不仅能够绘制复杂的图形,还能进行图像的旋转、缩放、扭曲等操作,并且...

    java2D超经典例程(包含2D各个方面,附源码)

    1. **初始化界面设计**:在Java 2D中,我们通常使用`Graphics2D`对象来绘制图形。你可以通过继承`JFrame`或`Applet`类并重写`paintComponent()`方法来创建一个画布。`Graphics2D`对象在这个方法中被用来执行所有的...

    Java2D编程--著名的Java大手动画

    环境:Window XP sp3, JDK 1.6, MyEclipse 5.5 运行步骤: 1、下载解压之后,使用...本示例一行注释一行代码,非常详细的说明了怎样使用Java 2D API来编写Java动画应用。 阅读对象:非常熟悉Java基本概念的人员

    JAVA2D开发实例

    在Java 2D开发中,Graphics类是核心组件,它提供了丰富的绘图功能,用于在Java应用的组件上绘制图形、文本和图像。以下是对Java 2D高级绘图技术的详细解释: 1. **Graphics类**:Graphics类位于java.awt包中,它是...

    Java 2D高级绘图

    在 Java 2D 出现之前,对于绘制能力、字体操作和图像控制的支持相对较少,对于诸如图案填充、形状操作和图形变换等重要操作的支持则完全没有。 Java 2D 满足了跨平台实现中对这些功能以及其他功能的需求,例如: -...

    java2d 物理引擎

    Java2D是Java平台的一个核心部分,提供了丰富的图形绘制和图像处理功能,使得开发者能够创建出具有复杂视觉效果的应用程序。 在Java2D物理引擎中,主要涉及到以下几个关键知识点: 1. **基本概念**:物理引擎的...

Global site tag (gtag.js) - Google Analytics