关于求处理图形问题 问题是这样的:利用两个圆来实现集合里面的文氏图,1.现两个圆相交后如何获取相交区域,然后对其进行不同颜色的填充? 2,另外两个圆不相交的区域是否也能获取。 各位给个思路,在下想了很久都没想到~~谢谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 圆A(Xa,Ya,Ra),圆B(Xb,Yb,Rb),相交的充要条件是,(Xa-Xb)^2+(Ya-Yb)^2≤(Ra+Rb)^2,等于时相切。先画圆,相交时,你取中点((Xa+Xb)/2,(Ya+Yb)/2)去填充,应该就ok了。 构造一个圆对象,java.awt.geom.Ellipse2D再用它构造java.awt.geom.Area这个类中有计算几何图形交集,差集的的方法,得到的是Area对象在用Graphics2D的fill(Shape s)方法分别填充不就行了 我也正在训练这个CAD画图功能的项目,刚开始 ,还没考虑相交的情况呢~~ 关注~~· 看一下 api里的java.awt.geom类 Areajava.lang.Object - java.awt.geom.Area想知道怎么实现看 java代码吧 import java.awt.BorderLayout;import java.awt.Canvas;import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.geom.Area;import java.awt.geom.Ellipse2D;import javax.swing.JFrame;class Viewer extends Canvas { private static final long serialVersionUID = -6628619675269538157L; private Color cep; private Color ce1; private Color ce2; private Area a1; private Area a2; private Area ap; public Viewer(Ellipse2D e1, Ellipse2D e2) { if (e1 == null) throw new NullPointerException("e1 is null"); if (e2 == null) throw new NullPointerException("e2 is null"); this.a1 = new Area(e1); this.a2 = new Area(e2); Area t1 = (Area) a1.clone(); Area t2 = (Area) a2.clone(); this.a1.subtract(t2); this.a2.subtract(t1); t1.intersect(t2); this.ap = t1; this.cep = Color.MAGENTA; this.ce1 = Color.RED; this.ce2 = Color.BLUE; } public void paint(Graphics g) { super.paint(g); if (this.a1 == null || this.a2 == null || this.ap == null) return; Graphics2D g2d = (Graphics2D) g; g2d.setColor(this.ce1); g2d.fill(this.a1); g2d.setColor(this.ce2); g2d.fill(this.a2); g2d.setColor(this.cep); g2d.fill(this.ap); } public void update(Graphics g) { paint(g); }}public class Test { public static void main(String[] args) { JFrame frm = new JFrame("Test"); Ellipse2D e1 = new Ellipse2D.Double(10.0, 10.0, 160.0, 160.0); Ellipse2D e2 = new Ellipse2D.Double(110.0, 60.0, 190.0, 190.0); Viewer vwr = new Viewer(e1, e2); frm.getContentPane().add(vwr, BorderLayout.CENTER); frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frm.setBounds(60, 60, 320, 290); frm.setVisible(true); }} timer事件每隔N秒被触发 一次怎么做 !!!!!!!!! 有没有StringBuffer与String的区别啊,详细点哦! 学习ajax.....遇到问题,在线等...... 小问题,求高手 JNI的问题 About resource file retrieving. 刚才去色情网站转了一下,一会功夫通过applet居然被自动安装了一个软件,问:不是applet很安全吗?这是如何实现的? 一个继承的问题... 关于JDK入门 谁有<<Java语言程序设计>> 基础篇和进阶篇 编程题奇数的答案?? java绘图程序的遗留问题(上贴未解决,请各位一定帮忙!)
先画圆,相交时,你取中点((Xa+Xb)/2,(Ya+Yb)/2)去填充,应该就ok了。
再用它构造
java.awt.geom.Area
这个类中有计算几何图形交集,差集的的方法,得到的是Area对象
在用Graphics2D的fill(Shape s)方法分别填充不就行了
java.awt.geom
类 Areajava.lang.Object
- java.awt.geom.Area想知道怎么实现看 java代码吧
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
class Viewer extends Canvas { private static final long serialVersionUID = -6628619675269538157L; private Color cep;
private Color ce1;
private Color ce2;
private Area a1;
private Area a2;
private Area ap; public Viewer(Ellipse2D e1, Ellipse2D e2) {
if (e1 == null) throw new NullPointerException("e1 is null");
if (e2 == null) throw new NullPointerException("e2 is null");
this.a1 = new Area(e1);
this.a2 = new Area(e2);
Area t1 = (Area) a1.clone();
Area t2 = (Area) a2.clone();
this.a1.subtract(t2);
this.a2.subtract(t1);
t1.intersect(t2);
this.ap = t1;
this.cep = Color.MAGENTA;
this.ce1 = Color.RED;
this.ce2 = Color.BLUE;
} public void paint(Graphics g) {
super.paint(g);
if (this.a1 == null || this.a2 == null || this.ap == null) return;
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(this.ce1);
g2d.fill(this.a1);
g2d.setColor(this.ce2);
g2d.fill(this.a2);
g2d.setColor(this.cep);
g2d.fill(this.ap);
} public void update(Graphics g) {
paint(g);
}}
public class Test { public static void main(String[] args) {
JFrame frm = new JFrame("Test");
Ellipse2D e1 = new Ellipse2D.Double(10.0, 10.0, 160.0, 160.0);
Ellipse2D e2 = new Ellipse2D.Double(110.0, 60.0, 190.0, 190.0);
Viewer vwr = new Viewer(e1, e2);
frm.getContentPane().add(vwr, BorderLayout.CENTER);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setBounds(60, 60, 320, 290);
frm.setVisible(true);
}}