OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [classpath/] [java/] [awt/] [geom/] [Ellipse2D.java] - Blame information for rev 771

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 771 jeremybenn
/* Ellipse2D.java -- represents an ellipse in 2-D space
2
   Copyright (C) 2000, 2002, 2004 Free Software Foundation
3
 
4
This file is part of GNU Classpath.
5
 
6
GNU Classpath is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 2, or (at your option)
9
any later version.
10
 
11
GNU Classpath is distributed in the hope that it will be useful, but
12
WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
General Public License for more details.
15
 
16
You should have received a copy of the GNU General Public License
17
along with GNU Classpath; see the file COPYING.  If not, write to the
18
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19
02110-1301 USA.
20
 
21
Linking this library statically or dynamically with other modules is
22
making a combined work based on this library.  Thus, the terms and
23
conditions of the GNU General Public License cover the whole
24
combination.
25
 
26
As a special exception, the copyright holders of this library give you
27
permission to link this library with independent modules to produce an
28
executable, regardless of the license terms of these independent
29
modules, and to copy and distribute the resulting executable under
30
terms of your choice, provided that you also meet, for each linked
31
independent module, the terms and conditions of the license of that
32
module.  An independent module is a module which is not derived from
33
or based on this library.  If you modify this library, you may extend
34
this exception to your version of the library, but you are not
35
obligated to do so.  If you do not wish to do so, delete this
36
exception statement from your version. */
37
 
38
package java.awt.geom;
39
 
40
 
41
/**
42
 * Ellipse2D is the shape of an ellipse.
43
 * <BR>
44
 * <img src="doc-files/Ellipse-1.png" width="347" height="221"
45
 * alt="A drawing of an ellipse" /><BR>
46
 * The ellipse is defined by it's bounding box (shown in red),
47
 * and is defined by the implicit curve:<BR>
48
 * <blockquote>(<i>x</i>/<i>a</i>)<sup>2</sup> +
49
 * (<i>y</i>/<i>b</i>)<sup>2</sup> = 1<BR><BR></blockquote>
50
 *
51
 * @author Tom Tromey (tromey@cygnus.com)
52
 * @author Eric Blake (ebb9@email.byu.edu)
53
 *
54
 * @since 1.2
55
 */
56
public abstract class Ellipse2D extends RectangularShape
57
{
58
  /**
59
   * Ellipse2D is defined as abstract.
60
   * Implementing classes are Ellipse2D.Float and Ellipse2D.Double.
61
   */
62
  protected Ellipse2D()
63
  {
64
  }
65
 
66
  /**
67
   * Determines if a point is contained within the ellipse. <P>
68
   * @param x - x coordinate of the point.
69
   * @param y - y coordinate of the point.
70
   * @return true if the point is within the ellipse, false otherwise.
71
   */
72
  public boolean contains(double x, double y)
73
  {
74
    double rx = getWidth() / 2;
75
    double ry = getHeight() / 2;
76
    double tx = (x - (getX() + rx)) / rx;
77
    double ty = (y - (getY() + ry)) / ry;
78
    return tx * tx + ty * ty < 1.0;
79
  }
80
 
81
  /**
82
   * Determines if a rectangle is completely contained within the
83
   * ellipse. <P>
84
   * @param x - x coordinate of the upper-left corner of the rectangle
85
   * @param y - y coordinate of the upper-left corner of the rectangle
86
   * @param w - width of the rectangle
87
   * @param h - height of the rectangle
88
   * @return true if the rectangle is completely contained, false otherwise.
89
   */
90
  public boolean contains(double x, double y, double w, double h)
91
  {
92
    double x2 = x + w;
93
    double y2 = y + h;
94
    return (contains(x, y) && contains(x, y2) && contains(x2, y)
95
           && contains(x2, y2));
96
  }
97
 
98
  /**
99
   * Returns a PathIterator object corresponding to the ellipse.<P>
100
   *
101
   * Note: An ellipse cannot be represented exactly in PathIterator
102
   * segments, the outline is thefore approximated with cubic
103
   * Bezier segments.
104
   *
105
   * @param at an optional transform.
106
   * @return A path iterator.
107
   */
108
  public PathIterator getPathIterator(AffineTransform at)
109
  {
110
    // An ellipse is just a complete arc.
111
    return new Arc2D.ArcIterator(this, at);
112
  }
113
 
114
  /**
115
   * Determines if a rectangle intersects any part of the ellipse.<P>
116
   * @param x - x coordinate of the upper-left corner of the rectangle
117
   * @param y - y coordinate of the upper-left corner of the rectangle
118
   * @param w - width of the rectangle
119
   * @param h - height of the rectangle
120
   * @return true if the rectangle intersects the ellipse, false otherwise.
121
   */
122
  public boolean intersects(double x, double y, double w, double h)
123
  {
124
    Rectangle2D r = new Rectangle2D.Double(x, y, w, h);
125
    if (! r.intersects(getX(), getY(), getWidth(), getHeight()))
126
      return false;
127
 
128
    if (contains(x, y) || contains(x, y + h) || contains(x + w, y)
129
        || contains(x + w, y + h))
130
      return true;
131
 
132
    Line2D l1 = new Line2D.Double(getX(), getY() + (getHeight() / 2),
133
                                  getX() + getWidth(),
134
                                  getY() + (getHeight() / 2));
135
    Line2D l2 = new Line2D.Double(getX() + (getWidth() / 2), getY(),
136
                                  getX() + (getWidth() / 2),
137
                                  getY() + getHeight());
138
 
139
    if (l1.intersects(r) || l2.intersects(r))
140
      return true;
141
 
142
    return false;
143
  }
144
 
145
  /**
146
   * An {@link Ellipse2D} that stores its coordinates using <code>double</code>
147
   * primitives.
148
   */
149
  public static class Double extends Ellipse2D
150
  {
151
    /**
152
     * The height of the ellipse.
153
     */
154
    public double height;
155
 
156
    /**
157
     * The width of the ellipse.
158
     */
159
    public double width;
160
 
161
    /**
162
     * The upper-left x coordinate of the bounding-box
163
     */
164
    public double x;
165
 
166
    /**
167
     * The upper-left y coordinate of the bounding-box
168
     */
169
    public double y;
170
 
171
    /**
172
     * Creates a new Ellipse2D with an upper-left coordinate of (0,0)
173
     * and a zero size.
174
     */
175
    public Double()
176
    {
177
    }
178
 
179
    /**
180
     * Creates a new Ellipse2D within a given rectangle
181
     * using double-precision coordinates.<P>
182
     * @param x - x coordinate of the upper-left of the bounding rectangle
183
     * @param y - y coordinate of the upper-left of the bounding rectangle
184
     * @param w - width of the ellipse
185
     * @param h - height of the ellipse
186
     */
187
    public Double(double x, double y, double w, double h)
188
    {
189
      this.x = x;
190
      this.y = y;
191
      height = h;
192
      width = w;
193
    }
194
 
195
    /**
196
     * Returns the bounding-box of the ellipse.
197
     * @return The bounding box.
198
     */
199
    public Rectangle2D getBounds2D()
200
    {
201
      return new Rectangle2D.Double(x, y, width, height);
202
    }
203
 
204
    /**
205
     * Returns the height of the ellipse.
206
     * @return The height of the ellipse.
207
     */
208
    public double getHeight()
209
    {
210
      return height;
211
    }
212
 
213
    /**
214
     * Returns the width of the ellipse.
215
     * @return The width of the ellipse.
216
     */
217
    public double getWidth()
218
    {
219
      return width;
220
    }
221
 
222
    /**
223
     * Returns x coordinate of the upper-left corner of
224
     * the ellipse's bounding-box.
225
     * @return The x coordinate.
226
     */
227
    public double getX()
228
    {
229
      return x;
230
    }
231
 
232
    /**
233
     * Returns y coordinate of the upper-left corner of
234
     * the ellipse's bounding-box.
235
     * @return The y coordinate.
236
     */
237
    public double getY()
238
    {
239
      return y;
240
    }
241
 
242
    /**
243
     * Returns <code>true</code> if the ellipse encloses no area, and
244
     * <code>false</code> otherwise.
245
     *
246
     * @return A boolean.
247
     */
248
    public boolean isEmpty()
249
    {
250
      return height <= 0 || width <= 0;
251
    }
252
 
253
    /**
254
     * Sets the geometry of the ellipse's bounding box.<P>
255
     *
256
     * @param x - x coordinate of the upper-left of the bounding rectangle
257
     * @param y - y coordinate of the upper-left of the bounding rectangle
258
     * @param w - width of the ellipse
259
     * @param h - height of the ellipse
260
     */
261
    public void setFrame(double x, double y, double w, double h)
262
    {
263
      this.x = x;
264
      this.y = y;
265
      height = h;
266
      width = w;
267
    }
268
  } // class Double
269
 
270
  /**
271
   * An {@link Ellipse2D} that stores its coordinates using <code>float</code>
272
   * primitives.
273
   */
274
  public static class Float extends Ellipse2D
275
  {
276
    /**
277
     * The height of the ellipse.
278
     */
279
    public float height;
280
 
281
    /**
282
     * The width of the ellipse.
283
     */
284
    public float width;
285
 
286
    /**
287
     * The upper-left x coordinate of the bounding-box
288
     */
289
    public float x;
290
 
291
    /**
292
     * The upper-left y coordinate of the bounding-box
293
     */
294
    public float y;
295
 
296
    /**
297
     * Creates a new Ellipse2D with an upper-left coordinate of (0,0)
298
     * and a zero size.
299
     */
300
    public Float()
301
    {
302
    }
303
 
304
    /**
305
     * Creates a new Ellipse2D within a given rectangle
306
     * using floating-point precision.<P>
307
     * @param x - x coordinate of the upper-left of the bounding rectangle
308
     * @param y - y coordinate of the upper-left of the bounding rectangle
309
     * @param w - width of the ellipse
310
     * @param h - height of the ellipse
311
     *
312
     */
313
    public Float(float x, float y, float w, float h)
314
    {
315
      this.x = x;
316
      this.y = y;
317
      this.height = h;
318
      this.width = w;
319
    }
320
 
321
    /**
322
     * Returns the bounding-box of the ellipse.
323
     * @return The bounding box.
324
     */
325
    public Rectangle2D getBounds2D()
326
    {
327
      return new Rectangle2D.Float(x, y, width, height);
328
    }
329
 
330
    /**
331
     * Returns the height of the ellipse.
332
     * @return The height of the ellipse.
333
     */
334
    public double getHeight()
335
    {
336
      return height;
337
    }
338
 
339
    /**
340
     * Returns the width of the ellipse.
341
     * @return The width of the ellipse.
342
     */
343
    public double getWidth()
344
    {
345
      return width;
346
    }
347
 
348
    /**
349
     * Returns x coordinate of the upper-left corner of
350
     * the ellipse's bounding-box.
351
     * @return The x coordinate.
352
     */
353
    public double getX()
354
    {
355
      return x;
356
    }
357
 
358
    /**
359
     * Returns y coordinate of the upper-left corner of
360
     * the ellipse's bounding-box.
361
     * @return The y coordinate.
362
     */
363
    public double getY()
364
    {
365
      return y;
366
    }
367
 
368
    /**
369
     * Returns <code>true</code> if the ellipse encloses no area, and
370
     * <code>false</code> otherwise.
371
     *
372
     * @return A boolean.
373
     */
374
    public boolean isEmpty()
375
    {
376
      return height <= 0 || width <= 0;
377
    }
378
 
379
    /**
380
     * Sets the geometry of the ellipse's bounding box.<P>
381
     *
382
     * @param x - x coordinate of the upper-left of the bounding rectangle
383
     * @param y - y coordinate of the upper-left of the bounding rectangle
384
     * @param w - width of the ellipse
385
     * @param h - height of the ellipse
386
     */
387
    public void setFrame(float x, float y, float w, float h)
388
    {
389
      this.x = x;
390
      this.y = y;
391
      height = h;
392
      width = w;
393
    }
394
 
395
    /**
396
     * Sets the geometry of the ellipse's bounding box.
397
     *
398
     * Note: This leads to a loss of precision.<P>
399
     *
400
     * @param x - x coordinate of the upper-left of the bounding rectangle
401
     * @param y - y coordinate of the upper-left of the bounding rectangle
402
     * @param w - width of the ellipse
403
     * @param h - height of the ellipse
404
     */
405
    public void setFrame(double x, double y, double w, double h)
406
    {
407
      this.x = (float) x;
408
      this.y = (float) y;
409
      height = (float) h;
410
      width = (float) w;
411
    }
412
  } // class Float
413
} // class Ellipse2D

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.