Just nu i M3-nätverket
Jump to content

Behöver hjälp med 2d (Intersection)


Martin515

Recommended Posts

Hej

 

Jag skapar 2 objekt på en Panel, en cirkel och en rektangel.

Där dessa två objekt möts ska det vara en annan färg.

(Det kallas nog "intersection" på engelska, men jag minns inte vad det heter på svenska)

 

Koden:

Shape circle3 = new Ellipse2D.Double (170,65,42,42);

Shape rect3 = new Rectangle2D.Double(155,85,32,32);

 

Area area1 = new Area (circle);

Area area2 = new Area (rect);

area1.exclusiveOr (area2);

g2.setColor(Color.BLUE);

 

g2.fill(area1);

g2.draw(area1);

g2.setColor(Color.YELLOW);

g2.fill(area2);

g2.draw(area2);

 

Gör att det inte syns nån intersection.

Om jag byter sista stycket mot

g2.setPaint (Color.blue);

g2.fill (area1);

g2.setPaint (Color.yellow);

g2.draw (area1);

 

så kommer denna intersection synas mycket väl.

Men jag vill ha olika färger på rektangeln och cirkeln.

Båda blir blåa med en gul ram runt.

 

TACK /

 

(Själva intersection ska vara vit som bakgrunden)

[inlägget ändrat 2005-02-22 14:33:19 av Martin515]

Link to comment
Share on other sites

Det finns många varianter. T ex kan du först rita upp de båda figurerna och sen skapa en ny Area som är snittet mellan dem och rita upp det över figurerna. Eller så kan du använda subtract()-metoden för att klippa ur lämplig bit av båda figurerna.

 

[log]import java.awt.*;

import java.awt.geom.*;

import javax.swing.*;

 

public class Snitt extends Frame {

public void paint(Graphics g) {

Graphics2D g2 = (Graphics2D) g;

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

 

/* Metod 1: Rita snittet med bakgrundsfärg över figurerna. */

Area circ = new Area(new Ellipse2D.Double(30,30,50,50));

Area rect = new Area(new Rectangle2D.Double(50,50,70,50));

 

/* skapa snittet från en klon av cirkeln */

Area inter = (Area) circ.clone();

inter.intersect(rect);

 

g2.setPaint(new Color(0xAA0000));

g2.fill(circ);

g2.setPaint(new Color(0x0000AA));

g2.fill(rect);

g2.setPaint(g2.getBackground());

g2.fill(inter);

 

/* Metod 2: Klipp ut snittet från båda figurerna */

circ = new Area(new Ellipse2D.Double(30,130,50,50));

rect = new Area(new Rectangle2D.Double(50,150,70,50));

Area rect2 = (Area) rect.clone();

rect.subtract(circ);

g2.setPaint(new Color(0xAAAA00));

g2.fill(rect);

circ.subtract(rect2);

g2.setPaint(new Color(0x00AA00));

g2.fill(circ);

 

}

 

public static void main(String s[]) {

Frame f = new Snitt();

f.setSize(new Dimension(150,250));

f.show();

}

}[/log]

 

Ytterligare ett alternativ är det här: http://java.sun.com/docs/books/tutorial/2d/display/compositing.html

 

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...