kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

16章 計算幾何学

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』再開します
どこまでいったんだかすっかり忘却の彼方
15章は終わったのかな
じゃあ「16章 計算幾何学」から
計算機科学と紛らわしいな

少なくとも途中までは高校の数学みたいな感じ

問題を解くためのアルゴリズムを実装するためには、幾何学的なオブジェクト
(点や線分など)に対する基本的な操作を行うための細かい部品を集めた、
いわゆるライブラリを用意する必要があります。

このへんからやっていこう
Pythonだと最初から用意されてるかも、と思ったけどぱっと見はなさげ

Point型はまずこう

class Point():
    def __init__(self, x=0.0, y=0.0):
        self.x = x
        self.y = y

それはいいとして、

typedef Point Vector;

Pythonだとどう書くんだ
考えてみるとそういうのなんかあったっけ?
こうかな?

class Vector(Point):
    pass

大丈夫そう
もしかしてこれでも動くか?

Vector = Point

動いてるみたい
なんとなくこっちの方が効率よさそうな気がするけど

typedef vector<Point> Polygon;

Polygon = list

でいいんだろうか

>>> Polygon = list
>>> p = Polygon()
>>> p.append(1)
>>> p.append(2)
>>> print(p)
[1, 2]

動いてなくもないみたいだけどあやしい気もするなあ

class Polygon(list):
    pass

だと怪しくないかっていうとそうでもない気がするけど
あとでメソッド追加しそうだからこの方がいいか
ちょっと調べたほうがいいかもな