Java 2D Geom Package

slimwhimperSoftware and s/w Development

Nov 3, 2013 (3 years and 9 months ago)

229 views

ให้ท ำกำรเขียนโปรแกรมเพื่อแสดงร

ปภำพ ดังนี้












การวาดรูปหลายเหลี่ยม
(polygon)


Polygon
()


Polygon
(
int
[ ]
xpoints, int
[ ]
ypoints, int
[ ]
npoints)


int
[ ]
xpoints

คือ
Array
ที่ก

าหนดค


X


int
[ ]
ypoints
คือ
Array
ที่ก

าหนดค


Y


int

npoints
คือ

จ านวนจุด


import java
.
awt
.*
;

import java
.
awt
.
geom
.*
;

class Drawing extends javax
.
swing
.
JFrame {


public void paint
(
Graphics g
)
{


Polygon poly
=
new Polygon
()
;


poly
.
addPoint
(
100, 100
)
;

poly
.
addPoint
(
175, 50
)
;


poly
.
addPoint
(
250, 100
)
;

poly
.
addPoint
(
250, 200
)
;


poly
.
addPoint
(
175, 250
)
;

poly
.
addPoint
(
100, 200
)
;


g
.
drawPolygon
(
poly
)
; }


public static void main
(
String args
[])
{



Drawing d
=
new Drawing
()
;




d
.
setSize
(
400, 400
)
;


d
.
setBackground
(
Color
.
white
)
;


d
.
setVisible
(
true
)
; }

}

import java.awt.*;

import java.awt.geom.*;

class Drawing extends javax.swing.JFrame {


public void paint(Graphics g) {


Polygon poly = new Polygon();


int[] x = {75, 150, 225, 225, 150, 75};


int[] y = {100, 50, 100, 200, 250, 200};


g.drawPolygon(x, y, x.length); }


public static void main(String args[]) {



Drawing d = new Drawing();



d.setDefaultCloseOperation(EXIT_ON_CLOSE);


d.setSize(400, 400);


d.setBackground(Color.white);


d.setVisible(true); }

}

Java 2D Geom
Package

การสร้างกราฟิกด้วยชุดของ

java.awt.geom

Character of Geom


เป็นชุดการสร้าง

2
D
ที่มีความหลากหลายของวัตถุที่สร้างมากกว


java.awt.*
เช

น การสร้างเส้นโค้ง
(arc)

หรือรูปหลายเหลี่ยม
(
polygon
)
เป็นต้น โดยที่การเขียนค าสั

งนั

นยังคงรูปแบบการเขียนที่
คล้ายก

นซึ่งมีล าดับการท างานแบบ
sequential
ที่เรียงล าดับค าสั

งจาก
บนลงล

างเสมอ




อนการเขียนค าสั

งต้องมีการ
import
คลาส ด้วยค าสั




import

java.awt
.
geom
.*


Program Structure

import

java.awt
.
geom
.*
;

import

java.awt
.*
;

class
ชื่อคลาส
extends Frame{


Constructor( ){ configuration of Frame }


paint( ){ Drawing Shape }

}

2D Shape


Area()

A



เป็นการก

าหนดพื

นที่การวาดรูป


CubicCurve
2
D()


Dimension
2
D()


Ellipse
2
D()

A


เป็นการวาดรูปวงรี


Line
2
D()
A


เป็นการวาดเส้นตรง


Point
2
D()

A


เป็นการก

าหนดจุด


QuadCurve
2
D()


Rectangle
2
D()
A

เป็นการวาดรูปสี่เหลี่ยม


RoundRectangle
2
D()

A

เป็นการวาดรูปสี่เหลี่ยมมุมโค้ง

Line2D()


เป็นค าสั

งวาดเส้นตรงโดยมีรูปแบบค าสั

งดังนี



Line
2
D
.
Float
(
X
1
,Y
1
,X
2
,Y
2
)
;


Line
2
D
.
Double
(
X
1
,Y
1
,X
2
,Y
2
)
;



X
1
,Y
1

ต าแหน

งเริ




X
2
,Y
2

ต าแหน

งสิ

นสุด



import java
.
awt
.*
;

import java
.
awt
.
geom
.*
;

class Drawing extends
Frame

{


public void paint
(
Graphics g
)
{


Graphics2D g2

= (
Graphics2D
)
g;


Line2D lin
=
new Line2D
.
Float
(
100, 100, 250, 260
)
;


g2
.
draw
(
lin
)
;


}


public static void main
(
String args
[])
{



Drawing d
=
new Drawing
()
;



d
.
setSize
(
400, 400
)
;


d
.
setBackground
(
Color
.
white
)
;


d
.
setVisible
(
true
)
;


}

}

QuadCurve
2
D()


เป็นการวาดรูปเส้นโค้งที่มีก

าหนดจุดต้น จุดที่ดึงเส้น และจุดปลาย
ของเส้น สามารถสร้างโดยค าสั




QuadCurve
2
D.Float()


QuadCurve
2
D.Double()


QuadCurve
2
D.Float(x
1
,y
1
,ctrlx,ctrly,x
2
,y
2
)


QuadCurve
2
D.Double(x
1
,y
1
,ctrlx,ctrly,x
2
,y
2
)


import java
.
awt
.*
;

import java
.
awt
.
geom
.*
;

class Drawing extends javax
.
swing
.
JFrame {


QuadCurve2D lin;


public void paint
(
Graphics g
)
{


Graphics2D g2

= (
Graphics2D
)
g;


lin
=
new QuadCurve2D
.
Float
()
;


lin
.
setCurve
(
100, 100, 200, 400,300,100
)
;


g2
.
draw
(
lin
)
; }


public static void main
(
String args
[])
{



Drawing d
=
new Drawing
()
;



d
.
setDefaultCloseOperation
(
EXIT_ON_CLOSE
)
;


d
.
setSize
(
400, 400
)
;


d
.
setBackground
(
Color
.
white
)
;


d
.
setVisible
(
true
)
; }

}

import java.awt.*;

import java.awt.geom.*;

class Drawing extends javax.swing.JFrame {


QuadCurve
2
D lin;


public void paint(Graphics g) {


Graphics
2
D g
2
= (Graphics
2
D) g;


lin = new QuadCurve
2
D.Float(
100
,
100
,
200
,
400
,
300
,
100
);


g
2
.draw(lin); }


public static void main(String args[]) {



Drawing d = new Drawing();



d.setDefaultCloseOperation(EXIT_ON_CLOSE);


d.setSize(
400
,
400
);


d.setBackground(Color.white);


d.setVisible(true);


}

}

CubicCurve2D
()


เป็นการวาดรูปเส้นโค้งที่มีก

าหนดจุดต้น จุดที่ดึงเส้น
2
จุด และจุด
ปลายของเส้น


CubicCurve2D.Float()


CubicCurve2D.Double()


CubicCurve2D.Float(x1,y1,
ctrlx1,ctrly1,

ctrlx2,ctrly2
,x2,y2)


CubicCurve2D.Double(x1,y1,
ctrlx,ctrly, ctrlx2,ctrly2
,x2,y2)

x
1
,y
1

x
2
,y
2

ctrlx
1
,ctrly
1

ctrlx2,ctrly2

import java.awt.*;

import java.awt.geom.*;

class Drawing extends javax.swing.JFrame {


CubicCurve
2
D lin;


public void paint(Graphics g) {


Graphics
2
D g
2
= (Graphics
2
D) g;


lin = new CubicCurve
2
D.Float();


lin.setCurve(
100
,
100
,
200
,
400
,
300
,
50
,
600
,
100
);


g
2
.draw(lin); }


public static void main(String args[]) {



Drawing d = new Drawing();



d.setDefaultCloseOperation(EXIT_ON_CLOSE);


d.setSize(
700
,
400
);


d.setBackground(Color.white);


d.setVisible(true); }

}

import java.awt.*;

import java.awt.geom.*;

class Drawing extends javax.swing.JFrame {


CubicCurve2D lin;


public void paint(Graphics g) {


Graphics2D g2 = (Graphics2D) g;


lin = new CubicCurve2D.Float(100, 100, 200, 400,300,50,600,100);


g2.draw(lin);


}


public static void main(String args[]) {



Drawing d = new Drawing();



d.setDefaultCloseOperation(EXIT_ON_CLOSE);


d.setSize(700, 400);


d.setBackground(Color.white);


d.setVisible(true);


}

}


Ellipse
2
D
()


เป็นการวาดรูปวงรี โดยจะระบุจุดเริ


x,y
ความกว้าง และความสูง
ของวงรี

ค าสั

งในการสร้าง


Ellipse
2
D
.
Double
()


Ellipse
2
D
.
Float
()


Ellipse
2
D
.
Double
(
double X, double Y, double Width, double Height
)


Ellipse
2
D
.
Float
(
float X, float Y, float Width, float Height
)



ค าสั


Ellipse
2
D
.
Double
()

และ
Ellipse
2
D
.
Float
()

จะมีการก

าหนดการ
วาดรูปด้วยค าสั


setFrame(X, Y, Width, Height
)



import java.awt.*;

import java.awt.geom.*;

class Drawing extends Frame {


Ellipse
2
D lin;


public void paint(Graphics g) {


Graphics
2
D g
2
= (Graphics
2
D) g;


lin = new Ellipse
2
D.Float(
100
,
100
,
200
,
400
);


g
2
.draw(lin); }


public static void main(String args[]) {



Drawing d = new Drawing();



d.setSize(
400
,
600
);


d.setBackground(Color.white);


d.setVisible(true); }

}


import java.awt.*;

import java.awt.geom.*;

class Drawing extends Frame {


Ellipse2D lin;


public void paint(Graphics g) {


Graphics2D g2 = (Graphics2D) g;


lin = new Ellipse2D.Float(100, 100, 200, 400);


g2.draw(lin); }


public static void main(String args[]) {



Drawing d = new Drawing();



d.setSize(400, 600);


d.setBackground(Color.white);


d.setVisible(true); }

}


100
,
100

200

400

Rectangle
2
D()


เป็นการวาดรูปสี่เหลี่ยม โดยจะระบุจุดเริ


x,y
ความกว้าง และ
ความสูงของสี่เหลี่ยม


ค าสั

งในการสร้าง


Rectangle
2
D
.
Double
()


Rectangle
2
D
.
Float
()


Rectangle
2
D
.
Double
(
double X, double Y, double Width, double
Height
)


Rectangle
2
D
.
Float
(
float X, float Y, float Width, float Height
)



ค าสั


Rectangle
2
D
.
Double
()

และ
Rectangle
2
D
.
Float
()

จะมีการ


าหนดการวาดรูปด้วยค าสั


setFrame(X, Y, Width, Height
)



import java.awt.*;

import java.awt.geom.*;

class Drawing extends Frame {


Rectangle2D lin;


public void paint(Graphics g) {


Graphics2D g2 = (Graphics2D) g;


lin = new Rectangle2D.Float(100, 100, 200, 400);


g2.draw(lin); }


public static void main(String args[]) {



Drawing d = new Drawing();



d.setSize(400, 600);


d.setBackground(Color.white);


d.setVisible(true); }

}


import java.awt.*;

import java.awt.geom.*;

class Drawing extends Frame {


Rectangle
2
D lin;


public void paint(Graphics g) {


Graphics
2
D g
2
= (Graphics
2
D) g;


lin = new Rectangle
2
D.Float(
100
,
100
,
200
,
400
);


g
2
.draw(lin); }


public static void main(String args[]) {



Drawing d = new Drawing();



d.setSize(
400
,
600
);


d.setBackground(Color.white);


d.setVisible(true); }

}


Rectangle2D()


เป็นการวาดรูปสี่เหลี่ยมขอบมน โดยจะระบุจุดเริ


x,y
ความกว้าง
และความสูงของสี่เหลี่ยม ความกว้างของมุม และความสูงของมุม


ค าสั

งในการสร้าง


Rectangle
2
D
.
Double
()


Rectangle
2
D
.
Float
()


Rectangle
2
D
.
Double
(
double X, double Y, double Width, double
Height
)


Rectangle
2
D
.
Float
(
float X, float Y, float Width, float Height
)



ค าสั


Rectangle
2
D
.
Double
()

และ
Rectangle
2
D
.
Float
()

จะมีการ


าหนดการวาดรูปด้วยค าสั


setFrame(X, Y, Width, Height
)



import java.awt.*;

import java.awt.geom.*;

class Drawing extends Frame {


RoundRectangle
2
D lin;


public void paint(Graphics g) {


Graphics
2
D g
2
= (Graphics
2
D) g;


lin = new RoundRectangle
2
D.Float(
100
,
100
,
200
,
400
,
20
,
20
);


g
2
.draw(lin); }


public static void main(String args[]) {



Drawing d = new Drawing();



d.setSize(
400
,
600
);


d.setBackground(Color.white);


d.setVisible(true); }

}


import java.awt.*;

import java.awt.geom.*;

class Drawing extends Frame {


RoundRectangle
2
D lin;


public void paint(Graphics g) {


Graphics
2
D g
2
= (Graphics
2
D) g;


lin = new RoundRectangle
2
D.Float(
100
,
100
,
200
,
400
,
20
,
20
);


g
2
.draw(lin); }


public static void main(String args[]) {



Drawing d = new Drawing();



d.setSize(
400
,
600
);


d.setBackground(Color.white);


d.setVisible(true); }

}


Arc2D()


เป็นการวาดรูปสี่เหลี่ยมเส้นโค้งโดยระบุจุดเริ


x,y
ความกว้าง
และความสูง มุมเริ

มต้นในแกนนอน มุมในแกนแกนตั

ง และชนิด
ของเส้นโค้ง


ชนิดของเส้นโค้ง


0
คือ เส้นโค้งจากจุดเริ


-
สิ

นสุด หรือ
Arc
2
D
.
OPEN


1
คือ เส้นโค้งจากจุดเริ


-
สิ

นสุดและมีเส้นระหว

างจุดทั

งสอง หรือ
Arc
2
D
.
CHORD


2
คือ เส้นโค้งจากจุดเริ


-
สิ

นสุดและมีเส้นระหว

างจุดทั

งสองก


จุดตัดของเส้นมุมทั

งสอง หรือ
Arc
2
D
.
PIE


0

1

2

ค าสั

งในการสร้าง


Arc
2
D
.
Double
()


Arc
2
D
.
Float
()


Arc
2
D
.
Double
(
X, Y, Width, Height, Theta, Delta, Type
)


Arc
2
D
.
Float
(
X, Y, Width, Height, Theta, Delta, Type
)



ค าสั


Arc
2
D
.
Double
()

และ
Arc
2
D
.
Float
()

จะมีการก

าหนดการวาดรูป
ด้วยค าสั


setFrame
(
X, Y, Width, Height, Theta, Delta, Type
)

import java.awt.*;

import java.awt.geom.*;

class Drawing extends Frame {


Arc
2
D lin;


public void paint(Graphics g) {


Graphics
2
D g
2
= (Graphics
2
D) g;


lin = new Arc
2
D.Float(
10
,
50
,
150
,
150
,
0
,
60
,
0
);


g
2
.draw(lin); }


public static void main(String args[]) {



Drawing d = new Drawing();



d.setSize(
200
,
300
);


d.setBackground(Color.white);


d.setVisible(true); }

}


import java.awt.*;

import java.awt.geom.*;

class Drawing extends Frame {


RoundRectangle
2
D lin;


public void paint(Graphics g) {


Graphics
2
D g
2
= (Graphics
2
D) g;


lin = new RoundRectangle
2
D.Float(
100
,
100
,
200
,
400
,
20
,
20
);


g
2
.draw(lin); }


public static void main(String args[]) {



Drawing d = new Drawing();



d.setSize(
400
,
600
);


d.setBackground(Color.white);


d.setVisible(true); }

}


import java.awt.*;

import java.awt.geom.*;

class Drawing extends Frame {


RoundRectangle
2
D lin;


public void paint(Graphics g) {


Graphics
2
D g
2
= (Graphics
2
D) g;


lin = new RoundRectangle
2
D.Float(
100
,
100
,
200
,
400
,
20
,
20
);


g
2
.draw(lin); }


public static void main(String args[]) {



Drawing d = new Drawing();



d.setSize(
400
,
600
);


d.setBackground(Color.white);


d.setVisible(true); }

}


Area()


รูปแบบค าสั




Area
()
เป็นการสร้างพื

นที่เปล

าๆ โดยไม

มีการก

าหนดรูปร

างของ
พื

นที่ว

ามีรูปร

างแบบใด


Area(Shape s)
เป็นการสร้างพื

นที่ขึ

นเราโดยก

าหนดให้มี
รูปร

างเช



triangle, rectangular
เป็นต้น


Operation with Area


Add() Adds the shape of the specified Area to
the shape of this Area. The resulting shape of
this Area will include the union of both
shapes, or all areas that were contained in
either this or the specified Area.


Subtract() Subtracts the shape of the
specified Area from the shape of this Area.
The resulting shape of this Area will include
areas that were contained only in this Area
and not in the specified Area.

Operation with Area


Intersect() Sets the shape of this Area to the
intersection of its current shape and the
shape of the specified Area. The resulting
shape of this Area will include only areas that
were contained in both this Area and also in
the specified Area.

Operation with Area


exclusiveOr() Sets the shape of this Area to
be the combined area of its current shape
and the shape of the specified Area, minus
their intersection. The resulting shape of this
Area will include only areas that were
contained in either this Area or in the
specified Area, but not in both.

add
(
Area rhs
)

//
Example
:

Area a
1

=
new Area
([
triangle
0
,
0

=
>
8
,
0

=
>
0
,
8
])
;

Area a
2

=
new Area
([
triangle
0
,
0

=
>
8
,
0

=
>
8
,
8
])
;

a
1
.
add
(
a
2
)
;


a
1
(
before
) +

a
2

=

a
1
(
after
)

subtract(Area rhs)

//
Example
:

Area a
1

=
new Area
([
triangle
0
,
0

=
>
8
,
0

=
>
0
,
8
])
;

Area a
2

=
new Area
([
triangle
0
,
0

=
>
8
,
0

=
>
8
,
8
])
;

a
1
.
subtract
(
a
2
)
;


a
1
(
before
)
-


a
2

=

a
1
(
after
)

intersect(Area rhs)

//
Example
:

Area a
1

=
new Area
([
triangle
0
,
0

=
>
8
,
0

=
>
0
,
8
])
;

Area a
2

=
new Area
([
triangle
0
,
0

=
>
8
,
0

=
>
8
,
8
])
;

a
1
.
intersect(a
2
)
;


a
1
(
before
)
intersect a
2

=

a
1
(
after
)

exclusiveOr(Area rhs)

//
Example
:

Area a
1

=
new Area
([
triangle
0
,
0

=
>
8
,
0

=
>
0
,
8
])
;

Area a
2

=
new Area
([
triangle
0
,
0

=
>
8
,
0

=
>
8
,
8
])
;

a
1
.
exclusiveOr
(a
2
)
;


a
1
(
before
)
exclusiveOr

a
2

=

a
1
(
after
)

กำรเทียบเคียงกับ
Set Operation


Add()
คือ การ
Union (

)


Subtract()
คือ การ


เช


A
-
B
คือ อยู

ใน
A
แต

ไม

อยู

ใน
B


Intersect()
คือ

การ
Intersect (

)


exclusiveOr()
คือ
A’


B’
หรือ
(A

B)
-
(A

B)




http
://
java
.
sun
.
com
/
products
/
java
-
media
/
2
D
/
samples
/
suite
/
Clipping
/
Areas
.
java

A

B

A
-
B

A∩B

U

A

U
B


import java.awt.*;

import java.awt.geom.*;

class Drawing extends Frame {


public static void main(String[] args) {


Drawing f = new Drawing();


f.setTitle(" Drawing v
1.0
"); f.setSize(
300
,
150
);


f.setVisible(true); }


public void paint(Graphics g) {


Graphics
2
D g
2
= (Graphics
2
D) g;


g
2
.setColor(Color.green);


Ellipse
2
D e = new Ellipse
2
D.Double(
10
,
50
,
70
,
70
);


Area leaf
1
= new Area(e);


Ellipse
2
D f = new Ellipse
2
D.Double(
50
,
50
,
70
,
70
);


Area leaf
2
= new Area(f);


leaf
2
= new Area(f);


leaf
1
.exclusiveOr(leaf
2
);


g
2
.fill(leaf
1
); }


}