kb84tkhrのブログ

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

CGL_2_D: Distance (続き2)

今日は昨日の結果を使ってこんなコード書いてたんですけどね
なんか書いてみると単純なコードだなあと思って
楽勝感を感じつつ交点の座標も求めたりしていたところ

    def intersect_ratio(self, other: 'Segment') -> Tuple[float, float]:
        a = self.vector()
        b = other.vector()
        c = self.p1 - other.p1
        s = b.cross(c) / a.cross(b)
        t = a.cross(c) / a.cross(b)
        return s, t

    def intersects(self, other: 'Segment') -> bool:
        s, t = self.intersect_ratio(other)
        return (0 <= s <= 1) and (0 <= t <= 1)

    def intersection(self, other: 'Segment') -> Point:
        s, _ = self.intersect_ratio(other)
        return self.p1 + s * self.vector()

テストしてたら0割りしてるっていうことに気がついてですね
あちゃーって感じ

交わっているかを求めるより先に、平行かどうかを分けておかないと
ってことか

ってことは一致してる場合も場合分けか
一致してれば距離は0
平行なときは交わらない一般の場合と同じでよさそう