lp.p2 = p[j] j = i if intersect(lp, lt): count += 1 return count % 2 def printInside(t, res): print('점(%s, %s) : ' % (t.x, t.y), end=' ') if res: print('내부') else: print('외부') N = 16 t = g.point(None, None, None) p = [] p.append(g.point(None, None, None)) for i in range(N): p.append(g.point(g.x_value[i], g.y_value[i], g.c_value[i])) p.append(g.point(None, None, None)) minIndex = 1 for i in range(2, N + 1): if p[i].y < p[minIndex].y: minIndex = i p[minIndex], p[1] = p[1], p[minIndex] selectionSort(p, N) t.x, t.y = 13, 4 printInside(t, inside(t, p, N)) t.x, t.y = 7, 9
for i in range(1, n + 1): if p[i].y == p[min_index].y: if p[i].x > p[min_index].x: min_index = i p[1], p[min_index] = p[min_index], p[1] selection_sort(p, n) p[0] = p[n] m = 3 for i in range(4, n + 1): while ccw(p[m], p[m - 1], p[i]) >= 0: m -= 1 m += 1 p[i], p[m] = p[m], p[i] return m N = len(g.x_value) p = [] p.append(g.point(0, 0, None)) for i in range(N): p.append(g.point(g.x_value[i], g.y_value[i], g.c_value[i])) M = graham_scan(p, N) for i in range(1, M + 1): print(p[i].c, end=' ')
class Range: dummy = g.point(0, 0, None) class node: p = g.point l = None r = None def __init__(self, pp, ll, rr): self.p = pp self.l = ll self.r = rr z = node(dummy, 0, 0) z.l = z z.r = z head = node(dummy, 0, z) def insert(self, p): d = True f = self.node t = self.head while t != self.z: if d: td = p.x < t.p.x else: td = p.y < t.p.y f = t if td: t = t.l else: t = t.r d = not d t = self.node(self.dummy, 0, 0) t.p = p t.l = self.z t.r = self.z if td: f.l = t else: f.r = t def search(self, t_range): return self.searchr(self.head.r, t_range, 0) def searchr(self, t, t_range, d): count = 0 if t == self.z: return 0 tx1 = t_range.x1 < t.p.x tx2 = t.p.x <= t_range.x2 ty1 = t_range.y1 < t.p.y ty2 = t.p.y <= t_range.y2 if d: t1 = tx1 t2 = tx2 else: t1 = ty1 t2 = ty2 if t1: count += self.searchr(t.l, t_range, not d) if insideReact(t.p, t_range): count += 1 if t2: count += self.searchr(t.r, t_range, not d) return count
if t1: count += self.searchr(t.l, t_range, not d) if insideReact(t.p, t_range): count += 1 if t2: count += self.searchr(t.r, t_range, not d) return count N = 8 r = Range() t_range = rect() p = [] for i in range(N): p.append(g.point(g.x_value[i], g.y_value[i], g.c_value[i])) for i in range(N): r.insert(p[i]) t_range.x1 = 3 t_range.y1 = 1 t_range.x2 = 7 t_range.y2 = 3 result = r.search(t_range) print("범위 내에 있는 점의 개수 : ", result)
def __init__(self): self.p = g.point(max, max, '') self.next = None
p = node() h = p for i in range(N): t = node() t.p.x = g.x_value[i] t.p.y = g.y_value[i] t.p.c = g.c_value[i] p.next = t p = p.next p.next = z return h N = 8 max = 1000 cp1 = g.point(max, max, '') cp2 = g.point(max, max, '') min = max z = node() z.p.x = max z.p.y = max z.next = z h = node() h.next = readlist() t_pass = 1 h.next = sort(h.next, N) t_pass = 2 h.next = sort(h.next, N) print('min = %.3f, cp1 = %s, cp2 = %s' % (min, cp1.c, cp2.c))