一:基本原理

利用Java 2D的Area对象对绘制形状几何操作的支持,完成太极图案的绘制,使用Paint来

完成对不同颜色的填充。Java 2D图形API Area对Shape支持四种几何操作:

-         Add (加)- 保留两个几何形状及其重叠部分

-         Subtract (减) – 从第一个几何形状上减去和第二个重叠的部分,保留减去之后的第一个几

何形状

-         Intersect (与) – 只保留两个几何形状重叠的部分。

-         ExclusiveOr(或) – 保留他们相互不重叠的部分。

参看下图:

二:程序运行效果

程序基于JDK6 API完成。

背景图片我是在网上找来的,可以自己替换的。

程序源代码如下:

package com.gloomyfish.swing;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;import javax.imageio.ImageIO;
import javax.swing.JComponent;
import javax.swing.JFrame;public class YingYangGraphics extends JComponent {/*** */private static final long serialVersionUID = 8812325148970066491L;private BufferedImage image = null;public YingYangGraphics() {super();this.setOpaque(false);}protected void paintComponent(Graphics g) {Graphics2D g2 = (Graphics2D)g;g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);g2.drawImage(getImage(), 0, 0, image.getWidth(), image.getHeight(), null);Shape lefthalfCirle = new Ellipse2D.Double(10,10, 300,300); // R = 150Shape righthalfCircle = new Ellipse2D.Double(10,10, 300,300); // R = 150Shape innerCircle1 = new Ellipse2D.Double(85,10, 150,150); // R/2 = 75Shape innerCircle2 = new Ellipse2D.Double(85,160, 150,150); // R = 150Shape rectangel1 = new Rectangle2D.Double(160, 10, 150, 300);Shape rectangel2 = new Rectangle2D.Double(10, 10, 150, 300);Area left = new Area(lefthalfCirle);Area right = new Area(righthalfCircle);Area area11 = new Area(rectangel1);Area area22 = new Area(rectangel2);left.subtract(area11);right.subtract(area22);Area inner1 = new Area(innerCircle1);Area inner2 = new Area(innerCircle2);left.add(inner1);//left.subtract(inner2);right.add(inner2);right.subtract(inner1); // trick is here !!!// create minor circle here!!!Shape minorWhiteCircle = new Ellipse2D.Double(150,70, 20,20); // ++ 60Shape innerBlackCircle = new Ellipse2D.Double(150,230, 20,20); // R = 150// draw two big frame shape here...g2.setPaint(Color.WHITE);g2.fill(left);g2.setPaint(Color.BLACK);g2.fill(right);// draw minor circle here!!!g2.fill(minorWhiteCircle);g2.setPaint(Color.WHITE);g2.fill(innerBlackCircle);}private BufferedImage getImage() {if(image != null) {return image;}try {File file = new File("D:\\android\\blue_flower.jpg");image = ImageIO.read(file);} catch (Exception e) {e.printStackTrace();}return image;}public static void main(String[] args) {JFrame frame = new JFrame("Test Panel");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().setLayout(new BorderLayout());// Display the window.frame.getContentPane().add(new YingYangGraphics(), BorderLayout.CENTER);frame.setPreferredSize(new Dimension(330,350));frame.pack();frame.setVisible(true);}
}

使用Java 2D绘制黑白太极图案相关推荐

  1. HTML5 Canvas组件绘制太极图案

    一实现思路: 实现原理主要是利用HTML5的Canvas组件提供的path函数功能来绘制圆,首先绘 制两个半圆,分别为黑色和白色,组成一个圆,绘制完成以后再分别绘制一个黑色 和白色的圆在绘制好的黑白圆 ...

  2. 学以致用——Java源码——使用随机几何图形制作屏保程序(Screen Saver with Shapes Using the Java 2D API)

    程序功能: 使用随机输出的几何图形作为屏保程序,用户可随时指定屏幕上要显示的图形元素的数量. 运行示例: 源码: 1. 实体类 import java.awt.Graphics; import jav ...

  3. 史上最扯Java图形绘制(J2SE)之一JAVA动画效果

    很多主一听说Java界面,一水的头大外带血压高,兄弟我倒觉得没什么必要.           其实Java这东西吧,就简便性和其初衷而言,真他妈就在GUI 这地界是有优势的,单就其2D界面开发的易用性 ...

  4. 《Java 2D游戏编程入门》—— 1.5 创建一个主动渲染的窗口

    本节书摘来异步社区<Java 2D游戏编程入门>一书中的第1章,第1.5节,作者:[美]Timothy Wright(莱特),更多章节内容可以访问云栖社区"异步社区"公 ...

  5. 计算机图形学应用场景,计算机图形学: 应用Java 2D和3D

    摘要: <计算机科学丛书·计算机图形学应用Java 2D和3D>提供了一个完整而权威的计算机图形学介绍,它并不需要低层次的编程或高深的数学背景.作者权衡了在软件和硬件方面的最新进展,结合高 ...

  6. java 2d 绘图教程_Java标准教程:Java 2D绘图--第2章 从绘图开始

    Java标准教程:Java 2D绘图--第2章从绘图开始 Java 2D API是强大并且复杂的.然而,大多数Java 2D API只用到了封装在java.awt.Graphic类中的功能的自己.本节 ...

  7. java 2d 教程_Java 2D开发技巧之“灯光与阴影”

    Java 2D开发技巧之"灯光与阴影" (2016-12-14 02:12:25) 标签: 杂谈 一. 引言 在本文中,我们将向你展示如何为扁平形状添加一种灯光效果以实现一种类3D ...

  8. java 2d绘图 stroke_Java标准教程:Java 2D绘图--第4章使用Text

    Java标准教程:Java 2D绘图--第4章使用Text 本节介绍文本API的用法,以及他们的渲染能力.至今为止,您已经有了基本的Java 2D文本API,同时知道如何设置字体和位置,以及绘制文本. ...

  9. java演练 循环嵌套 菱形图案的打印 四个阶段完成输出

    java演练 循环嵌套 菱形图案的打印 阶段一,视频 https://www.ixigua.com/6870331861256634894/ 阶段一,数据分析 阶段二,视频 http://mp.tou ...

最新文章

  1. Windows 8.1 PLSQL_32连接到RHEL6.1 Oracle10gr2_64
  2. jquery动画顺序执行_jquery怎样设置才能做完上一步动画再执行下一步
  3. c#window服务程序
  4. 为什么中国的程序员技术偏低
  5. mysql sql优化_MySQL数据库SQL语句优化原理专题(三)
  6. beyond compare4过期解决方法_面试必备:缓存穿透、雪崩解决方案及缓存击穿的四种解决方案...
  7. mvc4中的 webapi 的使用方式
  8. (论坛答疑点滴)DataGrid的EditCommandColumn如何使用图片作为按钮?
  9. 软件本地化 pdf_软件本地化与标准翻译
  10. opencv:卷积涉及的基础概念,Sobel边缘检测代码实现及Same(相同)填充与Vaild(有效)填充
  11. 如何使用搜索技巧来成为一名高效的程序员
  12. 服务器摆放需要预留U位么_这样的U型厨房,才是我向往的
  13. 京东联合vivo针对vivo X Note推出先行者计划
  14. Linkage 使用方法总结
  15. 2020.7.16.h5面试题
  16. 马小云:利用信息差赚钱的暴利创业项目 ,批量开店月入3万
  17. ArcGIS学习笔记-1.功能-1.1裁剪
  18. 星空粒子登录页面 jsp
  19. linux压缩文件命令_24.gzip、unzip命令详解 - 钟桂耀
  20. 显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn

热门文章

  1. 中链云&神算云 全球发布暨表彰盛典在深顺利召开
  2. 你需要的导航网站,这里都有
  3. 2021 百度网盘网页版 倍速播放技巧(亲测有效)
  4. win10切换输入法快捷键_软件快捷键失灵,可能是你没有安装美式键盘
  5. JavaScript变量
  6. 微信对接推送模板消息
  7. 厦大计算机科学系培养方案,计算机科学与技术学术型培养-厦门大学计算机科学系...
  8. 指纹识别技术研究MATLAB实现
  9. 系统平台新店铺运营思路
  10. 一个12升牛奶杯子,装着12升牛奶问题