Title: ?: 1?? ??
16? ?? ????
2??
- ?? ??
- ???? ????
- ??? ?? ??
- ?? ?? ??
- ??? ?? ?? ??
- ?? ?? ??
- ???? ????
- ??? ?? ????
- ?? ??
- ??? ?? ??
3?? ??(1)
- ???? ?? ??
- ? 1?? ??
- ?, ??? 2?? ??
- ??? 3?? ??
- ???? ??
- ??? ??
- ?? ??, ?? ???, ?? ???
- ??? ??
- ?? ???, CAD, ?? ?? ??
4?? ??(2)
- ?? ??? ?? ????
- ? struct point int x, y char c
- ? struct line struct point p1, p2
- ??? struct point polygonn
- ??? ? ??
A B C D E F G H I J K L M N O P
x 2 12 3 10 14 1 13 6 8 7 15 16 4 11 9 5
y 6 16 12 11 4 10 8 7 9 5 3 14 5 1 13 2
5?? ??(3)
6?? ??(4)
- ?? ??
- ?? AB
- ? ? ?? A? B? ??
- ???? AB
- ? A? B? ??? ????? ??? ??
- ??? AB
- ? A?? ???? ? B? ??? ??? ??
- ?? Ax
- ? A?? ???? ?? x?? ??? ???
- ??? ABC
- ? A?? ???? ? B? ?? ? C? ???? ???
7??? ?? ??(1)
- ??? ?? ?? ????
- ??l1? ??? p0, p1, ?? l2? ? ? ?? p2? ?, p0, p1,
p2? ?? ?? ?? ?? ?? ??? ??, l2? ?? ??? p2?? ?? p0,
p1, p2? ??? ?? ??? ?? ??? ?? ?? - ?? l2? ??? p0, p1, ?? l1? ? ? ?? p2? ?, p0, p1,
p2? ?? ?? ?? ?? ?? ??? ??, l1? ?? ??? p2?? ?? p0,
p1, p2? ??? ?? ??? ?? ??? ?? ?? - ?? ? ?? ??? ???? ?? ? ??? ???
8??? ?? ??(2)
p1
p1
p2
p2
p0
p0
9?? ?? ?? ?? ????
ccw(p0, p1, p2) dx1 ? p1.x - p0.x dy1 ?
p1.y - p0.y dx2 ? p2.x - p0.x dy2 ? p2.y -
p0.y if (dy1/dx1 gt dy2/dx2) then return 1
if (dy1/dx1 lt dy2/dx2) then return -1
if ((dx1 0) and (dy1 0)) then return 0
if ((dx1dx2 lt 0) or (dy1dy2 lt 0) then return
-1 if ((dx12dy12) lt (dx22dy22)) then
return 1 return 0 end ccw()
10?? ???? ?? ????
int intersect(struct line l1, struct line l2)
return ((ccw(l1.p1, l1.p2, l2.p1)
(ccw(l1.p1, l1.p2, l2.p2)) lt 0)
((ccw(l2.p1, l2.p2, l1.p1)
(ccw(l2.p1, l2.p2, l1.p2)) lt 0)
11?? ?? ??
- ?? ?? ??? ??? ??
- ??? ? ?? ????? ??
- ??????? ?? ?? ??? ??? ??
- (tan-1 dy/dx)
- ????? ??
- ??? ???? ?? ??
- tan-1 dy/dx ??
- dx? 0? ?, ? ???? ??? ??? ???
- dy/dx ?? dy/(dxdy) ??
- ??? ??? ???? ???? ??? tan-1dy/dx ? ?? ??? ???
12? ? ??? ?? ????
theta(p1, p2) dx ? p2.x - p1.x ax ? dx
dy ? p2.y - p1.y ay ? dy if ((ax
ay) 0) then t ? 0 else t ? dy/((ax ay)
if (dx lt 0) then t ? 2 - t else if (dy
lt 0) then t ? 4 t return t90.0 end
theta()
13?? ?? ??? ?
- N K E L G B D O I M C H J F A P N
14??? ?? ?? ??
- ?? ?? ??? ?? ?? ?? ??
- ??? ??? ??? ?? ??? ??? ??? ?? ?? ??? ?? ?
- ?? ??? ???? ??? ???? ???? ??
- ???? ???? ??? ?? ?
- ???? ???? ??? ?? ?
- ???? ??? ???? ?? ?? ?? ??? ??
15??? ??
16??? ??
- ?? ??? ???? ???? ?? ?? ?? ??
17?? ??? ??? ??? ??? ??(1)
18?? ??? ??? ??? ??? ??(2)
19??? ?? ?? ?? ????
inside(t, p, N) count ? 0 j ? 0
p0 ? pN pN1 ? p1 lt.p1 ? t lt.p2
? t lt.p2.x ? 8 for (i ? 1 i N i ? i
1) do lp.p1 ? pi lp.p2 ? pi
if (lp? lt? ???? ??)) then
lp.p2 ? pj j ? i if (lp? lt?
???) then count ? count 1
if (count ??) then return TRUE else
return FALSE end inside()
20?? ?? ??
- ???(convexity)
- ? ??? ???? ???
- ?? ???(convex polygon)
- ??? ??? ?? ? ?? ????? ???? ??? ??? ???? ?? ???
- ?? ??(convex hull)
- ?? ?? ?? ???? ? ? ?? ?? ???? ?? ?? ???
- ?? ??? ??? ?? ??
- ?? ?? 3?
- ?? ?? ?? ?
21?? ?? ?? ?
(b)
(a)
(c)
(d)
22???? ????
- ???? ????
- y ??? ?? ?? ?? ???? ???? ? ?? ??
- ???? x ?? ??? ??? ???? ???? ?? ?? ???? ???? ??? ?
?? ?? ?? - ???? ???? ??? ?? ??? ? ?? ?? ??? ?? ???? ?
- ? ??? ????? ???? ? ?? ?? ?? ?? ???? ??? ??
- Jarvis march ????? ??
- ? ??? ?? ??? ?? ???
- ?? ?? ?? ??? ??? ?? ??
- ??? ?? ?? ?? ??? ?
23???? ???? ???
- ??
- ??? ??
- ?? ?? ?? ?? ?? ?? ? ?? ???? O(N 2)
- ?? ??? ??? ??
- ?? ??? ??
- ??
- 3 ?? ???? ????? ? ??
- k-?? ???? ? ??? ?? ??? ?? ?? ???? ???? ?
24???? ????? ?? ??
25???? ????? ?? ?? (1)
B
M
L
O
C
D
F
I
G
H
A
J
E
K
P
N
26???? ????? ?? ?? (2)
N
27???? ????? ?? ?? (3)
K
N
28???? ????? ?? ?? (4)
L
K
N
29???? ????? ?? ?? (5)
B
L
K
N
30???? ????? ?? ?? (6)
B
M
L
K
N
31???? ????? ?? ?? (7)
B
M
L
F
K
N
32???? ????? ?? ?? (8)
B
M
L
F
A
K
N
33???? ????? ?? ?? (9)
B
M
L
F
A
K
P
N
34???? ?? ??
35???? ????
- ???? ????
- int PackageWrapping(point p, int N)
-
- int i, min, M float th, v
- for (min 0, i 1 i lt N i)
- if (pi.y lt pmin.y) min i
- pN pmin th 0.0
- for (M 0 M lt N M)
- swap(p, M, min)
- min N v th th 360.0
- for (i M1 i lt N i)
- if (theta(pM, pi) gt v)
- if (theta(pM, pi) lt th)
- min i
- th theta(pM, pmin)
-
- if (min N) return M
-
-
PackageWrapping(p, N) ?? p?? ?? ?? y ??
?? min? ????? ? pN ? pmin th ? 0.0
for (M ? 0 M lt N M) do ?? p??
M? min? ?? ?? min ? N v ? th th ?
360.0 for (i ? M1 i N i ? i 1)
do if (theta(pM, pi) gt v) then
if (theta(pM, pi) lt th) then
min ? i th ?
theta(pM, pmin) if (min
N) then return M end PackageWrapping()
36??? ?? ????
- ?? ??
- ?? ?? ???? ??
- y ???? ?? ?? ??? ??? ???? ????? ???? ????? ?? ???
???? ??? ?? - ?? ?M? ?? ?? ??? ?????, ?M? ???? ?? ??? ??? ?????
????? ?? - ?? ??? ????? ?? ??
- p1, p2, , pM? ?? ?? ???? ?? ??? ? pi?
????? ? ?, ccw(pM, pM-1, pi) 0 ?? pM?
?? - pM-1, pM, pi? ????? pM? ????, ????? pi?
??
37??? ?? ???? ?? ??(1)
K
N
38??? ?? ???? ?? ??(2)
E
K
N
39??? ?? ???? ?? ??(3)
L
K
N
40??? ?? ???? ?? ??(4)
L
G
K
N
41??? ?? ???? ?? ??(5)
B
L
K
N
42??? ?? ???? ?? ??(6)
B
L
D
K
N
43??? ?? ???? ?? ??(7)
B
L
O
K
N
44??? ?? ???? ?? ??(8)
B
L
O
I
K
N
45??? ?? ???? ?? ??(9)
B
M
L
K
N
46??? ?? ???? ?? ??(10)
B
M
L
C
K
N
47??? ?? ???? ?? ??(11)
B
M
L
C
H
K
N
48??? ?? ???? ?? ??(12)
B
M
L
C
J
K
N
49??? ?? ???? ?? ??(13)
B
M
L
F
K
N
50??? ?? ???? ?? ??(14)
B
M
L
F
A
K
N
51??? ?? ???? ?? ??(15)
B
M
L
F
A
K
P
N
52??? ?? ????
GrahamScan(p, N) ?? p?? ?? ?? y ?? ?? min?
????? ??, y ?? ?? ??? x ?? ?? ? ?? min? ?????
? ?? p?? 1? min? ?? ?? ?? p? ?????
?? p0 ? pN for (M ? 3, i ? 4 i N
i) do while (pM-1, pM, pi? ???)
do M ? M-1 M ? M 1 ?? p??
i? M? ?? ?? return M end GrahamScan()
53?? ??
- ?? ??
- ?? ?? ?? ?? ?? ? ?? ??
- ?) x ??? y ??? ?? ?? ?? ? ?? ?? ?? ?? ??
- ??? ? ??? ???? ??? ??? ?? ??? ??
- ??? ??? ??? ??? ?? ?? ???? ????? ??
- ?? ??
- ?? ?? ??? ????? ?? ??? ??
54???? ?? x,y ??? ?? ?
55?? ??? ?
56??? ?? ??
- ??? ?? ??
- 2?? ???? ?? N?? ?? ??? ??? ??? ?? ??? ? ?? ?? ??
- ?? ??
- ??? ?? ??
- ??? ??? ?? ??? ??? ??? ?? ?? ??? ?? ?? ?
- ???? ?????
- ?? ??? ?? ?? ??? ??? ?? ??? ??? ??
57??? ?? ??? ????
- ??? ??
- ?? ? ??? ??? ?? ???? ?? ??? ?? ?? ?
- ?? ???? O(N 2)
- ??? ??? ??
- ?? ?? ?????? ???? ??-?? ??? ??
- ?? ???? O(N logN)
58MergeSort? ??? ??
- ??? ??? ??? ?? ?? ????
- x ???? ??? ?? ??? ?? ??? ??
- ?? ??? ?? ??? ? ??
- ?? ?? ??? ??? ???
- ??? ?? ???, ?? ??? ??? ??? ??
- ?? ??? ?? ??? ? ?? ???(dividing line)? ????? ??
????? ??? ? ?? ??? ??? - MergeSort ??? ???
59??? ?? ?? ????
ClosestPair(p, N) ? ?? ????? ???? MergeSort
????? ???? x ??? ?? ??? ??? ? ?? ????? y
???? ?? ??? ??? ????? ??? ??? ?? ? ?,
min?? ?? ??? ????, cp1? cp2?? ?? ??? ? ??
??? end ClosestPair()
60??? ?? ?? ???? ?? ??(1)
B
M
L
O
C
D
F
I
G
H
A
J
E
K
P
N
61??? ?? ?? ???? ?? ??(2)
B
M
L
O
C
D
F
I
G
H
A
J
E
K
P
N
62??? ?? ?? ???? ?? ??(3)
B
M
L
O
C
D
F
I
G
H
A
J
E
K
P
N
63??? ?? ?? ???? ?? ??(4)
B
M
L
O
C
D
F
I
G
H
A
J
E
K
P
N
64??? ?? ?? ???? ?? ??(5)
B
M
L
O
C
D
F
I
G
H
A
J
E
K
P
N
65??? ?? ?? ???? ?? ??(6)
B
M
L
O
C
D
F
I
G
H
A
J
E
K
P
N
66??? ?? ?? ???? ?? ??(7)
B
M
L
O
C
D
F
I
G
H
A
J
E
K
P
N
67??? ?? ?? ???? ?? ??(8)
B
M
L
O
C
D
F
I
G
H
A
J
E
K
P
N
68??? ?? ?? ???? ?? ??(9)
B
M
L
O
C
D
F
I
G
H
A
J
E
K
P
N
69??? ?? ?? ???? ?? ??(10)
B
M
L
O
C
D
F
I
G
H
A
J
E
K
P
N
70??? ?? ?? ???? ?? ??(11)
B
M
L
O
C
D
F
I
G
H
A
J
E
K
P
N
71??? ?? ?? ???? ?? ??(12)
B
M
L
O
C
D
F
I
G
H
A
J
E
K
P
N
72??? ?? ?? ???? ?? ??(13)
B
M
L
O
C
D
F
I
G
H
A
J
E
K
P
N
73??? ?? ?? ???? ?? ??(14)
B
M
L
O
C
D
F
I
G
H
A
J
E
K
P
N
74??? ?? ?? ???? ?? ??(15)
B
M
L
O
C
D
F
I
G
H
A
J
E
K
P
N
75??? ?? ??? ?? ?? ?? ??
15
7
14
3
6
10
13
1
2
4
5
8
9
11
12
F
A
C
M
P
H
J
I
O
D
N
B
G
E
K
L
76?? ??? ????
- ???? ???(Voronoi polygon)
- ??? ? ???? ?? ?? ???? ??? ??? ?? ??? ?? ?? ??
- ???? ?????(Voronoi diagram)
- ???? ????? ???
- ??? ???? ???
- ?? ??? ??? ???? ??? ?? ?? ?????? ??
- ??? ????(Delaunay triangulation)
- ???? ?????? ??
77???? ????? ????
- ????
- Voronoi diagram? ??? ????? ??? ? ????? ?? ??? ???
?? - ?? x ??? ?? ?? ??
- ? ??? ???? ??? ???? ???? ???, ? ?? ??? ??? ???
??? ???? Voronoi diagram? ?? ? ? - ??? ??? y ??? ?? ????? ? ?? ??? ?? Voronoi
diagram? ??
78???? ?????
79??? ????