CGL_3_C: Polygon-Point Containment
点が多角形の内部にいるかどうか
点から外側に向かって線を引き、辺と交わった回数が奇数回なら内部、
偶数回なら外部、とあとは辺にのっかってるかどうかを見ればいいはず
そういえばPolygonクラスって作ってなかったな
とりあえず初期化はこんな感じだろうか
class Polygon:
def __init__(self, vertices: List[Point]) -> None:
self.vertices = vertices
self.n = len(vertices)
この問題は順番に辺を取り出したい
forで書けるとよさそうだから、イテレータだかジェネレータだか作ろう
よくわかってないけどこう?
def sides(self):
for i in range(self.n):
yield Segment(self.vertices[i],
self.vertices[(i + 1) % self.n])
試す
$ python3 -i shape.py
>>> tri = Polygon([Point(0, 0), Point(1, 0), Point(0, 1)])
>>> for s in tri.sides():
... print(s)
...
Segment(Point(0, 0), Point(1, 0))
Segment(Point(1, 0), Point(0, 1))
Segment(Point(0, 1), Point(0, 0))
よさそうではある
でも一度ちゃんと調べておこうかな