点と線分間の距離
会社で点と線分の距離を計算する必要があって、困っていたら、
http://www.deqnotes.net/acmicpc/2d_geometry/lines
に書いてあったので、Python風に書き換え。
def dot(p1, p2): return p1.real*p2.real + p1.imag*p2.imag def cross(p1, p2): return p1.real*p2.imag - p1.imag*p2.real def dotLineDist(p, line): "line: (p1, p2)" a, b = line if dot(b-a, p-a) <= 0.0: return abs(p-a) if dot(a-b, p-b) <= 0.0: return abs(p-b) return abs(cross(b-a, p-a))/abs(b-a) if __name__ == "__main__": print dotLineDist(1+2j, (1+1j, 2+2j))
引き算の再定義(というかクラス作るの)が面倒で複素数を使ってみたが、なかなか便利。
それにしても競技プログラミング馬鹿にしてたけど、こういうのがパッと書けるようになったら格好良いので、もうちょっと真面目にやってみようかなぁ。