/**
使用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的...
Java绘制2D图形是Java GUI编程中的一个重要部分,它允许开发者在屏幕上创建各种复杂的视觉元素。在本项目中,我们看到一个实现,它在构造的面板上随机绘制了20个图形,这些图形是由`MyShape`抽象类及其多个子类来...
Java绘制2D是Java编程语言中的一个重要组成部分,它允许开发者创建复杂的图形,包括矢量图形、位图图像以及动画。这个“Java绘制2D学习文档”涵盖了如何在Java环境中使用2D图形API来实现各种绘图功能的知识点。Java ...
总结一下,Java 2D是Java平台上用于2D图形绘制的重要工具,它提供了一整套的API,包括图形对象、颜色管理、文本渲染和图像处理等功能,使得开发者可以创建出功能丰富且视觉效果出众的Java应用程序。通过学习和熟练...
Java2D是一个用于在Java平台上进行2D图形和图像处理的API,它扩展了Java的基础绘图功能,提供了更高级别的图形绘制能力,包括路径、文本、图像以及复杂的变换和混合模式。在Java2D中实现动画主要是通过不断地重绘...
4. 图形绘制:使用 `fill()`、`stroke()` 等方法来绘制图形,例如绘制五星红旗的星星和旗面。 下面是一个使用 HTML5 Canvas 绘制五星红旗的示例代码: ```html <canvas id="canvas" width="400" height="266"></...
Java 2D 是Java平台提供的一种强大的图形处理技术,它允许开发者创建复杂的2D图形、图像和文本。这个"JAVA2D程序资源"压缩包显然包含了一系列与Java 2D编程相关的材料,如可视化编程蓝图模型、文档以及由模型自动...
这个中文教程《JAVA 2D API 中文使用指南》将详细介绍上述知识点,并通过实例演示如何使用Java 2D API 实现各种图形绘制和效果。建议读者结合教程中的示例代码进行实践,以加深理解。在学习过程中,不断尝试和实验,...
Java 2D API 是 Java 平台上的一个高级图形处理库,它为开发人员提供了绘制复杂图形的能力,包括线条、形状、图像等。通过 Java 2D,开发者可以轻松创建复杂的用户界面组件和动画效果。 ##### 1.1 Java 2D 的核心...
通过本指南,您将学习到如何使用Java 2D来绘制复杂的图形、处理图像以及实现各种图形效果。 #### 一、Java 2D API简介 Java 2D API主要包含以下几个部分: 1. **绘图与渲染**:这部分涵盖了如何在Java中绘制线条...
### 经典的Java2D画图:绘制两朵花 在Java图形编程领域中,Java2D提供了强大的工具和API来实现复杂的图形界面。本文将详细介绍如何利用Java2D来绘制两朵非常好看的花,并深入探讨代码中的关键概念和技术细节。 ###...
在给定的“opengl1.zip”压缩包中,包含了使用OpenGL绘制五星红旗的源代码文件“opengl1.cpp”。这为我们提供了一个学习如何使用OpenGL来实现几何形状绘制和纹理映射的实际示例。 OpenGL的工作流程通常包括以下几个...
- **基本模型**:Java 2D API保持了原有的图形绘制模型,即设置图形上下文后调用Graphics对象的绘制方法。Graphics2D扩展了Graphics,增加了更多图形属性和绘制方法。 - **设备无关性**:Java 2D API自动补偿不同...
Java2D Demo是官方提供的示例集合,展示了如何使用Java2D API来实现各种图形绘制和效果。 在Java2DTest这个压缩包中,我们可以期待找到一系列的Java源代码文件,这些文件包含了Java2D的各种示例代码。通过学习和...
Java2D是Java平台提供的用于绘制高质量二维图形的功能库。与AWT相比,Java2D提供了更加强大、灵活且独立于设备分辨率的图形处理能力。Java2D不仅能够绘制复杂的图形,还能进行图像的旋转、缩放、扭曲等操作,并且...
1. **初始化界面设计**:在Java 2D中,我们通常使用`Graphics2D`对象来绘制图形。你可以通过继承`JFrame`或`Applet`类并重写`paintComponent()`方法来创建一个画布。`Graphics2D`对象在这个方法中被用来执行所有的...
环境:Window XP sp3, JDK 1.6, MyEclipse 5.5 运行步骤: 1、下载解压之后,使用...本示例一行注释一行代码,非常详细的说明了怎样使用Java 2D API来编写Java动画应用。 阅读对象:非常熟悉Java基本概念的人员
在Java 2D开发中,Graphics类是核心组件,它提供了丰富的绘图功能,用于在Java应用的组件上绘制图形、文本和图像。以下是对Java 2D高级绘图技术的详细解释: 1. **Graphics类**:Graphics类位于java.awt包中,它是...
在 Java 2D 出现之前,对于绘制能力、字体操作和图像控制的支持相对较少,对于诸如图案填充、形状操作和图形变换等重要操作的支持则完全没有。 Java 2D 满足了跨平台实现中对这些功能以及其他功能的需求,例如: -...
Java2D是Java平台的一个核心部分,提供了丰富的图形绘制和图像处理功能,使得开发者能够创建出具有复杂视觉效果的应用程序。 在Java2D物理引擎中,主要涉及到以下几个关键知识点: 1. **基本概念**:物理引擎的...