Hmm, I read his message as meaning he just wanted to produce two non-sheared
ellipses with an angle between their, say, major axes of 40 degrees, i.e.
what he wants is a rotation around the center of the ellipse(s). But I could
be wrong.

Cheers,
Pete

Jim Graham wrote:
> 
> > I want to draw two Ellipses on different direction(eg, the anger between the
> > two axises is 40 degree).
> > Does the Graphics2D provides a simple way to solve the problem?
> 
> You can create an Ellipse2D object with perpendicular axes and then
> transform it with a shearing transform to produce a sheared ellipse
> with axes at a different angle:
> 
>         Ellipse2D ellipse = new Ellipse2D.Double(x, y, w, h);
>         AffineTransform at = new AffineTransform();
>         at.shear(Math.tan(Math.toRadians(90 - angle)), 0);
>         Shape s = at.createTransformedShape(ellipse);
> 
> Attached is a small test program to show this...
> 
>                                 ...jim
> 
>   ----------------------------------------------------------------------------
> import java.awt.*;
> import java.awt.geom.*;
> import java.awt.event.*;
> 
> public class Ellipsoid extends Canvas {
>     int angle = 90;
> 
>     public Dimension getPreferredSize() {
>         return new Dimension(400, 400);
>     }
> 
>     public void paint(Graphics g) {
>         // Code to create skewed Ellipse
>         Ellipse2D ellipse = new Ellipse2D.Double(-50, -100, 100, 200);
>         AffineTransform at = new AffineTransform();
>         at.shear(Math.tan(Math.toRadians(90 - angle)), 0);
>         Shape s = at.createTransformedShape(ellipse);
>         // End code to create skewed Ellipse
> 
>         // Code to illustrate results
>         Graphics2D g2d = (Graphics2D) g;
>         g2d.setColor(Color.white);
>         g2d.drawString("Angle = "+angle, 10, 20);
>         g2d.setStroke(new BasicStroke(3));
>         g2d.translate(200, 200);
>         g2d.setColor(Color.blue);
>         g2d.fill(s);
>         g2d.setColor(Color.green);
>         g2d.draw(s);
>         g2d.transform(at);
>         g2d.setColor(Color.red);
>         g2d.drawLine(-50, 0, 50, 0);
>         g2d.drawLine(0, -100, 0, 100);
>     }
> 
>     public void newAngle(int ang) {
>         this.angle = ang;
>         repaint();
>     }
> 
>     public static void main(String argv[]) {
>         Frame f = new Frame();
>         f.addWindowListener(new WindowAdapter() {
>             public void windowClosing(WindowEvent e) { System.exit(0); }
>         });
>         final Ellipsoid ell = new Ellipsoid();
>         Scrollbar sb = new Scrollbar(Scrollbar.HORIZONTAL, 90, 10, 30, 160);
>         sb.addAdjustmentListener(new AdjustmentListener() {
>             public void adjustmentValueChanged(AdjustmentEvent e) {
>                 ell.newAngle(e.getValue());
>             }
>         });
>         f.setLayout(new BorderLayout());
>         f.add(ell, "Center");
>         f.add(sb, "South");
>         f.pack();
>         f.show();
>     }
> }

--
Pete Cockerell
California, USA
<http://www.best.com/~petec>
=====================================================================
To subscribe/unsubscribe, send mail to [EMAIL PROTECTED]
Java 2D Home Page: http://java.sun.com/products/java-media/2D/

Reply via email to