====== 선분 교차 3 ====== ===== 풀이 ===== * [[ps:선분_교차#두 선분의 교점]]을 구하는 문제. * 계산 자체는 공식대로 넣어주면 되지만, 다양한 코너케이스를 모두 처리하는것이 번거롭다. ===== 코드 ===== """Solution code for "BOJ 20149. 선분 교차 3". - Problem link: https://www.acmicpc.net/problem/20149 - Solution link: http://www.teferi.net/ps/problems/boj/20149 Tags: [Geometry] """ from teflib import geometry DISJOINT = 0 OVERWRAPPING = 1 def intersect_point(x1, y1, x2, y2, x3, y3, x4, y4): if not geometry.is_intersecting(x1, y1, x2, y2, x3, y3, x4, y4): return DISJOINT denom = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4) if denom: t1, t2 = x1 * y2 - y1 * x2, x3 * y4 - y3 * x4 x = ((x3 - x4) * t1 - (x1 - x2) * t2) / denom y = ((y3 - y4) * t1 - (y1 - y2) * t2) / denom return (x, y) else: p1, p2, p3, p4 = sorted([(x1, y1), (x2, y2), (x3, y3), (x4, y4)]) return p2 if p2 == p3 else OVERWRAPPING def main(): x1, y1, x2, y2 = [int(x) for x in input().split()] x3, y3, x4, y4 = [int(x) for x in input().split()] point = intersect_point(x1, y1, x2, y2, x3, y3, x4, y4) if point == DISJOINT: print('0') else: print('1') if point != OVERWRAPPING: print(*point) if __name__ == '__main__': main() * Dependency: [[:ps:teflib:geometry#is_intersecting|teflib.geometry.is_intersecting]] {{tag>BOJ ps:problems:boj:플래티넘_4}}