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
平行なときは交わらない一般の場合と同じでよさそう