<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2F2D_Graphics_GUI%2FArea_Calculation</id>
		<title>Java/2D Graphics GUI/Area Calculation - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2F2D_Graphics_GUI%2FArea_Calculation"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/2D_Graphics_GUI/Area_Calculation&amp;action=history"/>
		<updated>2026-04-05T04:23:10Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/2D_Graphics_GUI/Area_Calculation&amp;diff=8145&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/2D_Graphics_GUI/Area_Calculation&amp;diff=8145&amp;oldid=prev"/>
				<updated>2010-06-01T06:55:11Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:55, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/2D_Graphics_GUI/Area_Calculation&amp;diff=8144&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/2D_Graphics_GUI/Area_Calculation&amp;diff=8144&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:46Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== A Java implementation of the X11 region ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * (C) 2004 - Geotechnical Software Services&lt;br /&gt;
 * &lt;br /&gt;
 * This code is free software; you can redistribute it and/or&lt;br /&gt;
 * modify it under the terms of the GNU Lesser General Public &lt;br /&gt;
 * License as published by the Free Software Foundation; either &lt;br /&gt;
 * version 2.1 of the License, or (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This code is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the&lt;br /&gt;
 * GNU Lesser General Public License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public &lt;br /&gt;
 * License along with this program; if not, write to the Free &lt;br /&gt;
 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, &lt;br /&gt;
 * MA  02111-1307, USA.&lt;br /&gt;
 */&lt;br /&gt;
//package no.geosoft.cc.geometry;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * A &amp;lt;em&amp;gt;Region&amp;lt;/em&amp;gt; is simply an area, as the name implies, and is&lt;br /&gt;
 * implemented as a so called &amp;quot;y-x-banded&amp;quot; array of rectangles; Each Region&lt;br /&gt;
 * is made up of a certain number of rectangles sorted by y coordinate first,&lt;br /&gt;
 * and then by x coordinate.&lt;br /&gt;
 * &amp;lt;p&amp;gt;&lt;br /&gt;
 * Furthermore, the rectangles are banded such that every rectangle with a&lt;br /&gt;
 * given upper-left y coordinate (y1) will have the same lower-right y&lt;br /&gt;
 * coordinate (y2) and vice versa. If a rectangle has scanlines in a band,&lt;br /&gt;
 * it will span the entire vertical distance of the band. This means that&lt;br /&gt;
 * some areas that could be merged into a taller rectangle will be represented&lt;br /&gt;
 * as several shorter rectangles to account for shorter rectangles to its&lt;br /&gt;
 * left or right but within its &amp;quot;vertical scope&amp;quot;.&lt;br /&gt;
 * &amp;lt;p&amp;gt;&lt;br /&gt;
 * An added constraint on the rectangles is that they must cover as much&lt;br /&gt;
 * horizontal area as possible. E.g. no two rectangles in a band are allowed&lt;br /&gt;
 * to touch. Whenever possible, bands will be merged together to cover a&lt;br /&gt;
 * greater vertical distance (and thus reduce the number of rectangles).&lt;br /&gt;
 * Two bands can be merged only if the bottom of one touches the top of the&lt;br /&gt;
 * other and they have rectangles in the same places (of the same width, of&lt;br /&gt;
 * course). This maintains the y-x-banding.&lt;br /&gt;
 * &amp;lt;p&amp;gt;&lt;br /&gt;
 * Region operations includes add (union), subtract, intersect, and&lt;br /&gt;
 * exclusive-or.&lt;br /&gt;
 * &amp;lt;p&amp;gt;&lt;br /&gt;
 * This class corresponds to Region.c of the X11 distribution and the&lt;br /&gt;
 * implemntation is based on it.&lt;br /&gt;
 * &amp;lt;p&amp;gt;&lt;br /&gt;
 * The &amp;lt;em&amp;gt;Region&amp;lt;/em&amp;gt; is essentially equivalent to an AWT &amp;lt;em&amp;gt;Area&amp;lt;/em&amp;gt;&lt;br /&gt;
 * but with different back-end implementation. Becnhmarking proves it more&lt;br /&gt;
 * than 100 times faster than AWT Area for binary CAG operations,&lt;br /&gt;
 * &amp;lt;p&amp;gt;&lt;br /&gt;
 * Thanks to:&lt;br /&gt;
 * &amp;lt;ul&amp;gt;&lt;br /&gt;
 * &amp;lt;li&amp;gt;Bryan Lin @ China Minmetals Corporation - for identifying&lt;br /&gt;
 *     synchronization errors when run on the MS WindowsXP platform.&lt;br /&gt;
 * &amp;lt;li&amp;gt;Maxim Butov @ Belhard - for identifying error in the&lt;br /&gt;
 *     isInside(Rect) method.&lt;br /&gt;
 * &amp;lt;/ul&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * @author &lt;br /&gt;
 */   &lt;br /&gt;
//public &lt;br /&gt;
class Rect&lt;br /&gt;
{&lt;br /&gt;
  public int  x;&lt;br /&gt;
  public int  y;&lt;br /&gt;
  public int  height;&lt;br /&gt;
  public int  width;&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Create a rectangle.&lt;br /&gt;
   * &lt;br /&gt;
   * @param x       X coordinate of upper left corner.&lt;br /&gt;
   * @param y       Y coordinate of upper left corner.&lt;br /&gt;
   * @param width   Width of rectangle.&lt;br /&gt;
   * @param height  Height of rectangle.&lt;br /&gt;
   */&lt;br /&gt;
  public Rect (int x, int y, int width, int height)&lt;br /&gt;
  {&lt;br /&gt;
    set (x, y, width, height);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * Create a default rectangle.&lt;br /&gt;
   */&lt;br /&gt;
  public Rect()&lt;br /&gt;
  {&lt;br /&gt;
    this (0, 0, 0, 0);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Create a rectangle as a copy of the specified rectangle.&lt;br /&gt;
   * &lt;br /&gt;
   * @param rectangle&lt;br /&gt;
   */&lt;br /&gt;
  public Rect (Rect rectangle)&lt;br /&gt;
  {&lt;br /&gt;
    this (rectangle.x, rectangle.y, rectangle.width, rectangle.height);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Create a rectnagle based on specified box.&lt;br /&gt;
   * &lt;br /&gt;
   * @param box  Box to create rectangle from.&lt;br /&gt;
   */&lt;br /&gt;
  public Rect (Box box)&lt;br /&gt;
  {&lt;br /&gt;
    this (box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Copy the specified rectangle.&lt;br /&gt;
   * &lt;br /&gt;
   * @param rectangle  Rectangle to copy.&lt;br /&gt;
   */&lt;br /&gt;
  public void copy (Rect rectangle)&lt;br /&gt;
  {&lt;br /&gt;
    this.x      = rectangle.x;&lt;br /&gt;
    this.y      = rectangle.y;&lt;br /&gt;
    this.width  = rectangle.width;&lt;br /&gt;
    this.height = rectangle.height;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Clone this rectangle&lt;br /&gt;
   * &lt;br /&gt;
   * @return  Clone of this rectangle.&lt;br /&gt;
   */&lt;br /&gt;
  public Object clone()&lt;br /&gt;
  {&lt;br /&gt;
    return new Rect (x, y, width, height);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Check if this rectangle equals the specified object.&lt;br /&gt;
   * &lt;br /&gt;
   * @param object  Object to chack.&lt;br /&gt;
   * @return        True if the two equals, false otherwise.&lt;br /&gt;
   */&lt;br /&gt;
  public boolean equals (Object object)&lt;br /&gt;
  {&lt;br /&gt;
    Rect rectangle = (Rect) object;&lt;br /&gt;
    return this.x      == rectangle.x     &amp;amp;&amp;amp;&lt;br /&gt;
           this.y      == rectangle.y     &amp;amp;&amp;amp;&lt;br /&gt;
           this.width  == rectangle.width &amp;amp;&amp;amp;&lt;br /&gt;
           this.height == rectangle.height;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * Return true if this rectangle is empty.&lt;br /&gt;
   * &lt;br /&gt;
   * @return  True if this rectangle is empty, false otherwise.&lt;br /&gt;
   */&lt;br /&gt;
  public boolean isEmpty()&lt;br /&gt;
  {&lt;br /&gt;
    return width &amp;lt;= 0 || height &amp;lt;= 0;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Expand this rectangle the specified amount in each direction.&lt;br /&gt;
   * &lt;br /&gt;
   * @param dx  Amount to expand to left and right.&lt;br /&gt;
   * @param dy  Amount to expand on top and botton.&lt;br /&gt;
   */&lt;br /&gt;
  public void expand (int dx, int dy)&lt;br /&gt;
  {&lt;br /&gt;
    x      -= dx;&lt;br /&gt;
    y      -= dy;&lt;br /&gt;
    width  += dx + dx;&lt;br /&gt;
    height += dy + dy;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Set the parameters for this rectangle.&lt;br /&gt;
   * &lt;br /&gt;
   * @param x       X coordinate of upper left corner.&lt;br /&gt;
   * @param y       Y coordinate of upper left corner.&lt;br /&gt;
   * @param width   Width of rectangle.&lt;br /&gt;
   * @param height  Height of rectangle.&lt;br /&gt;
   */&lt;br /&gt;
  public void set (int x, int y, int width, int height)&lt;br /&gt;
  {&lt;br /&gt;
    this.x      = x;&lt;br /&gt;
    this.y      = y;&lt;br /&gt;
    this.width  = width;&lt;br /&gt;
    this.height = height;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Set this rectangle as extent of specified polyline.&lt;br /&gt;
   * &lt;br /&gt;
   * @param xArray  X coordinates of polyline.&lt;br /&gt;
   * @param yArray  Y coordinates of polyline.&lt;br /&gt;
   */&lt;br /&gt;
  public void set (int xArray[], int yArray[])&lt;br /&gt;
  {&lt;br /&gt;
    int  minX = Integer.MAX_VALUE;&lt;br /&gt;
    int  maxX = Integer.MIN_VALUE;&lt;br /&gt;
    &lt;br /&gt;
    int  minY = Integer.MAX_VALUE;&lt;br /&gt;
    int  maxY = Integer.MIN_VALUE;&lt;br /&gt;
    for (int i = 0; i &amp;lt; xArray.length; i++) {&lt;br /&gt;
      if (xArray[i] &amp;lt; minX) minX = xArray[i];&lt;br /&gt;
      if (xArray[i] &amp;gt; maxX) maxX = xArray[i];&lt;br /&gt;
      if (yArray[i] &amp;lt; minY) minY = yArray[i];&lt;br /&gt;
      if (yArray[i] &amp;gt; maxY) maxY = yArray[i];&lt;br /&gt;
    }&lt;br /&gt;
    x = minX;&lt;br /&gt;
    y = minY;&lt;br /&gt;
    width  = maxX - minX + 1;&lt;br /&gt;
    height = maxY - minY + 1;    &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Return X coordinate of center of this rectangle.&lt;br /&gt;
   * &lt;br /&gt;
   * @return  X coordinate of center of this rectangle.&lt;br /&gt;
   */&lt;br /&gt;
  public int getCenterX()&lt;br /&gt;
  {&lt;br /&gt;
    return x + (int) Math.floor (width / 2.0);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Return Y coordinate of center of this rectangle.&lt;br /&gt;
   * &lt;br /&gt;
   * @return  Y coordinate of center of this rectangle.&lt;br /&gt;
   */&lt;br /&gt;
  public int getCenterY()&lt;br /&gt;
  {&lt;br /&gt;
    return y + (int) Math.floor (height / 2.0);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  /**&lt;br /&gt;
   * Return a string representation of this rectangle.&lt;br /&gt;
   * &lt;br /&gt;
   * @return  String representation of this rectangle.&lt;br /&gt;
   */&lt;br /&gt;
  public String toString()&lt;br /&gt;
  {&lt;br /&gt;
    return new String (&amp;quot;Rectangle: x= &amp;quot; + x + &amp;quot; y=&amp;quot; + y +&lt;br /&gt;
                       &amp;quot; width=&amp;quot; + width + &amp;quot; height=&amp;quot; + height);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Area Add ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import java.awt.geom.Area;&lt;br /&gt;
import java.awt.geom.Ellipse2D;&lt;br /&gt;
import javax.swing.JApplet;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
public class AreaAdd extends JApplet {&lt;br /&gt;
    Ellipse2D.Double circle = new Ellipse2D.Double();&lt;br /&gt;
    Ellipse2D.Double oval = new Ellipse2D.Double();&lt;br /&gt;
    Area circ = new Area(circle); &lt;br /&gt;
    Area ov = new Area(oval);&lt;br /&gt;
    public void init() {&lt;br /&gt;
        setBackground(Color.white);&lt;br /&gt;
    }&lt;br /&gt;
    public void paint (Graphics g) {&lt;br /&gt;
        Graphics2D g2 = (Graphics2D) g;&lt;br /&gt;
        double halfWdith = getSize().width/2;&lt;br /&gt;
        double halfHeight = getSize().height/2;&lt;br /&gt;
        circle.setFrame(halfWdith-25, halfHeight, 50.0, 50.0);&lt;br /&gt;
        oval.setFrame(halfWdith-19, halfHeight-20, 40.0, 70.0);&lt;br /&gt;
        circ = new Area(circle);&lt;br /&gt;
        ov = new Area(oval);&lt;br /&gt;
        circ.add(ov);&lt;br /&gt;
        g2.fill(circ);&lt;br /&gt;
    }&lt;br /&gt;
    public static void main(String s[]) {&lt;br /&gt;
        JFrame f = new JFrame(&amp;quot;Pear&amp;quot;);&lt;br /&gt;
        f.addWindowListener(new WindowAdapter() {&lt;br /&gt;
            public void windowClosing(WindowEvent e) {System.exit(0);}&lt;br /&gt;
        });&lt;br /&gt;
        JApplet applet = new AreaAdd();&lt;br /&gt;
        f.getContentPane().add(&amp;quot;Center&amp;quot;, applet);&lt;br /&gt;
        applet.init();&lt;br /&gt;
        f.pack();&lt;br /&gt;
        f.setSize(new Dimension(150,200));&lt;br /&gt;
        f.show();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Area Calculation: Add, Subtract, XOR ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BasicStroke;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Canvas;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.GridLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.geom.Area;&lt;br /&gt;
import java.awt.geom.Ellipse2D;&lt;br /&gt;
import java.awt.geom.GeneralPath;&lt;br /&gt;
import javax.swing.ButtonGroup;&lt;br /&gt;
import javax.swing.JApplet;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JRadioButton;&lt;br /&gt;
import javax.swing.border.TitledBorder;&lt;br /&gt;
public class TArea extends JApplet implements ActionListener {&lt;br /&gt;
  DrawingCanvas canvas;&lt;br /&gt;
  JRadioButton addButton, subtractButton, intersectButton, exclusiveORButton,&lt;br /&gt;
      resetButton;&lt;br /&gt;
  public static void main(String[] a) {&lt;br /&gt;
    JFrame f = new JFrame();&lt;br /&gt;
    TArea area = new TArea();&lt;br /&gt;
    area.init();&lt;br /&gt;
    f.getContentPane().add(area);&lt;br /&gt;
    f.setDefaultCloseOperation(1);&lt;br /&gt;
    f.setSize(650, 450);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public void init() {&lt;br /&gt;
    Container container = getContentPane();&lt;br /&gt;
    JPanel panel = new JPanel();&lt;br /&gt;
    panel.setLayout(new GridLayout(2, 2));&lt;br /&gt;
    resetButton = new JRadioButton(&amp;quot;Reset&amp;quot;, true);&lt;br /&gt;
    addButton = new JRadioButton(&amp;quot;Add&amp;quot;);&lt;br /&gt;
    subtractButton = new JRadioButton(&amp;quot;Subtract&amp;quot;);&lt;br /&gt;
    intersectButton = new JRadioButton(&amp;quot;Intersect&amp;quot;);&lt;br /&gt;
    exclusiveORButton = new JRadioButton(&amp;quot;ExclusiveOR&amp;quot;);&lt;br /&gt;
    ButtonGroup group = new ButtonGroup();&lt;br /&gt;
    group.add(resetButton);&lt;br /&gt;
    group.add(addButton);&lt;br /&gt;
    group.add(subtractButton);&lt;br /&gt;
    group.add(intersectButton);&lt;br /&gt;
    group.add(exclusiveORButton);&lt;br /&gt;
    group.add(resetButton);&lt;br /&gt;
    resetButton.addActionListener(this);&lt;br /&gt;
    addButton.addActionListener(this);&lt;br /&gt;
    subtractButton.addActionListener(this);&lt;br /&gt;
    intersectButton.addActionListener(this);&lt;br /&gt;
    exclusiveORButton.addActionListener(this);&lt;br /&gt;
    panel.add(addButton);&lt;br /&gt;
    panel.add(subtractButton);&lt;br /&gt;
    panel.add(intersectButton);&lt;br /&gt;
    panel.add(exclusiveORButton);&lt;br /&gt;
    container.add(panel, BorderLayout.NORTH);&lt;br /&gt;
    container.add(resetButton, BorderLayout.SOUTH);&lt;br /&gt;
    canvas = new DrawingCanvas();&lt;br /&gt;
    container.add(canvas);&lt;br /&gt;
  }&lt;br /&gt;
  class DrawingCanvas extends Canvas {&lt;br /&gt;
    GeneralPath gp;&lt;br /&gt;
    Ellipse2D ellipse;&lt;br /&gt;
    Area area1, area2;&lt;br /&gt;
    boolean drawFlag = true;&lt;br /&gt;
    boolean fillFlag = false;&lt;br /&gt;
    public DrawingCanvas() {&lt;br /&gt;
      setBackground(Color.white);&lt;br /&gt;
      setSize(350, 250);&lt;br /&gt;
      int w = getWidth();&lt;br /&gt;
      int h = getHeight();&lt;br /&gt;
      gp = new GeneralPath();&lt;br /&gt;
      gp.moveTo(w / 8, h / 2);&lt;br /&gt;
      gp.lineTo(w / 2, h / 4);&lt;br /&gt;
      gp.lineTo(7 * w / 8, h / 2);&lt;br /&gt;
      gp.lineTo(w / 2, 3 * h / 4);&lt;br /&gt;
      gp.closePath();&lt;br /&gt;
      area1 = new Area(gp);&lt;br /&gt;
      ellipse = new Ellipse2D.Double(w / 4, h / 4, w / 2, h / 2);&lt;br /&gt;
      area2 = new Area(ellipse); // Ellipse area object&lt;br /&gt;
    }&lt;br /&gt;
    public void paint(Graphics g) {&lt;br /&gt;
      Graphics2D g2D = (Graphics2D) g;&lt;br /&gt;
      g2D.setStroke(new BasicStroke(2.0f));&lt;br /&gt;
      if (drawFlag) {&lt;br /&gt;
        g2D.draw(area1);&lt;br /&gt;
        g2D.draw(area2);&lt;br /&gt;
      }&lt;br /&gt;
      if (fillFlag)&lt;br /&gt;
        g2D.fill(area1);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    JRadioButton temp = (JRadioButton) e.getSource();&lt;br /&gt;
    if (temp.equals(addButton)) {&lt;br /&gt;
      canvas.area1 = new Area(canvas.gp);&lt;br /&gt;
      canvas.area1.add(canvas.area2);&lt;br /&gt;
      canvas.drawFlag = false;&lt;br /&gt;
      canvas.fillFlag = true;&lt;br /&gt;
      canvas.repaint();&lt;br /&gt;
    } else if (temp.equals(subtractButton)) {&lt;br /&gt;
      canvas.area1 = new Area(canvas.gp);&lt;br /&gt;
      canvas.area1.subtract(canvas.area2);&lt;br /&gt;
      canvas.drawFlag = false;&lt;br /&gt;
      canvas.fillFlag = true;&lt;br /&gt;
      canvas.repaint();&lt;br /&gt;
    } else if (temp.equals(intersectButton)) {&lt;br /&gt;
      canvas.area1 = new Area(canvas.gp);&lt;br /&gt;
      canvas.area1.intersect(canvas.area2);&lt;br /&gt;
      canvas.drawFlag = false;&lt;br /&gt;
      canvas.fillFlag = true;&lt;br /&gt;
      canvas.repaint();&lt;br /&gt;
    } else if (temp.equals(exclusiveORButton)) {&lt;br /&gt;
      canvas.area1 = new Area(canvas.gp);&lt;br /&gt;
      canvas.area1.exclusiveOr(canvas.area2);&lt;br /&gt;
      canvas.drawFlag = false;&lt;br /&gt;
      canvas.fillFlag = true;&lt;br /&gt;
      canvas.repaint();&lt;br /&gt;
    } else if (temp.equals(resetButton)) {&lt;br /&gt;
      if (canvas.drawFlag == false) {&lt;br /&gt;
        canvas.area1 = new Area(canvas.gp);&lt;br /&gt;
        canvas.drawFlag = true;&lt;br /&gt;
        canvas.fillFlag = false;&lt;br /&gt;
        canvas.repaint();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Area Intersect ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
import java.awt.event.*;&lt;br /&gt;
import java.awt.font.*;&lt;br /&gt;
import java.awt.geom.*;&lt;br /&gt;
import javax.swing.*;&lt;br /&gt;
public class AreaIntersect extends JApplet {&lt;br /&gt;
    Ellipse2D.Double leaf = new Ellipse2D.Double(); &lt;br /&gt;
    Ellipse2D.Double stem = new Ellipse2D.Double();&lt;br /&gt;
    Area leaf1 = new Area(leaf); &lt;br /&gt;
    Area leaf2 = new Area(leaf); &lt;br /&gt;
    public void init() {&lt;br /&gt;
        setBackground(Color.white);&lt;br /&gt;
    }&lt;br /&gt;
    public void paint (Graphics g) {&lt;br /&gt;
        Graphics2D g2 = (Graphics2D) g;&lt;br /&gt;
        double halfWdith = getSize().width/2;&lt;br /&gt;
        double halfHeight = getSize().height/2;&lt;br /&gt;
        g2.setColor(Color.green);&lt;br /&gt;
        leaf.setFrame(halfWdith-16, halfHeight-29, 15.0, 15.0);&lt;br /&gt;
        leaf1 = new Area(leaf);&lt;br /&gt;
        leaf.setFrame(halfWdith-14, halfHeight-47, 30.0, 30.0);&lt;br /&gt;
        leaf2 = new Area(leaf); &lt;br /&gt;
        leaf1.intersect(leaf2);   &lt;br /&gt;
        g2.fill(leaf1);   &lt;br /&gt;
    }&lt;br /&gt;
    public static void main(String s[]) {&lt;br /&gt;
        JFrame f = new JFrame(&amp;quot;Pear&amp;quot;);&lt;br /&gt;
        f.addWindowListener(new WindowAdapter() {&lt;br /&gt;
            public void windowClosing(WindowEvent e) {System.exit(0);}&lt;br /&gt;
        });&lt;br /&gt;
        JApplet applet = new AreaIntersect();&lt;br /&gt;
        f.getContentPane().add(&amp;quot;Center&amp;quot;, applet);&lt;br /&gt;
        applet.init();&lt;br /&gt;
        f.pack();&lt;br /&gt;
        f.setSize(new Dimension(150,200));&lt;br /&gt;
        f.show();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Area Subtract ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import java.awt.geom.Area;&lt;br /&gt;
import java.awt.geom.Ellipse2D;&lt;br /&gt;
import javax.swing.JApplet;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
public class AreaSubtract extends JApplet {&lt;br /&gt;
    Ellipse2D.Double stem = new Ellipse2D.Double();&lt;br /&gt;
    Area st1 = new Area(stem); &lt;br /&gt;
    Area st2 = new Area(stem);&lt;br /&gt;
    public void init() {&lt;br /&gt;
        setBackground(Color.white);&lt;br /&gt;
    }&lt;br /&gt;
    public void paint (Graphics g) {&lt;br /&gt;
        Graphics2D g2 = (Graphics2D) g;&lt;br /&gt;
        double halfWdith = getSize().width/2;&lt;br /&gt;
        double halfHeight = getSize().height/2;&lt;br /&gt;
        stem.setFrame(halfWdith, halfHeight-42, 40.0, 40.0);&lt;br /&gt;
        st1 = new Area(stem);&lt;br /&gt;
        stem.setFrame(halfWdith+3, halfHeight-47, 50.0, 50.0);&lt;br /&gt;
        st2 = new Area(stem);&lt;br /&gt;
        st1.subtract(st2);&lt;br /&gt;
        g2.fill(st1);&lt;br /&gt;
        g2.setColor(Color.yellow);&lt;br /&gt;
    }&lt;br /&gt;
    public static void main(String s[]) {&lt;br /&gt;
        JFrame f = new JFrame(&amp;quot;Pear&amp;quot;);&lt;br /&gt;
        f.addWindowListener(new WindowAdapter() {&lt;br /&gt;
            public void windowClosing(WindowEvent e) {System.exit(0);}&lt;br /&gt;
        });&lt;br /&gt;
        JApplet applet = new AreaSubtract();&lt;br /&gt;
        f.getContentPane().add(&amp;quot;Center&amp;quot;, applet);&lt;br /&gt;
        applet.init();&lt;br /&gt;
        f.pack();&lt;br /&gt;
        f.setSize(new Dimension(150,200));&lt;br /&gt;
        f.show();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>