결론부터 말하면, 처음에 두 직선이 평행한 경우를 처리하는 것을 포함해 0으로 나누기가 절대로 등장하지 않는 방법은 알아냈지만
그냥 교점 구해서 체크하는 것과 수학적으로 차이가 없어보이네요
복잡하기만 해서 별로 좋지가 않습니다
그래도 그냥 참고용으로 적어놓도록 하겠습니다
1. 평행한 경우 처리는 ax+by=c 꼴로 변형해서 행렬식 계산해줍니다.
오차의 한계는 넉넉하게 잡아주시면 될 것 같네여
선분의 길이가 0인지(즉, 시작점과 끝점이 '거의' 같은지)도 판단하여 걸러줍니다
2. 두 선분이 평행하지 않다고 가정하면 아핀 변환을 통해 하나의 선분(L1이라고 합시다)의 시작점과 끝점을
각각 (0, 0)과 (1, 0)으로 변형할 수 있습니다.
Atan2(y, x)로 처리하면 나눗셈없이 표현 가능합니다.
이 아핀 변환에 의해 변환된 다른 하나의 선분(L2라고 합시다)의 끝점을 각각 S, E라고 하겠습니다
3. 두 선분이 교차하려면 적어도 S.y와 E.y의 부호가 같지 않아야 합니다
즉, S.y * E.y <= 0인지 체크합니다.
4. 위 조건을 통과했다면 중간값정리에 의해서 L2 위에 있는 점 중 하나는 y좌표가 0입니다.
삼각형의 닮음에 의해 그 점은 S.x와 E.x 사이를 |S.y|:|E.y|로 내분하는 점입니다.
선분 길이가 0이 아니라는 가정에 의해 |S.y| + |E.y| != 0이므로,
이 과정에서도 0으로 나누기는 발생할 수 없습니다.
5. 마지막으로 위에서 구한 내분점의 x좌표가 0과 1사이에 있는지 조사하면 됩니다.
길게 썼지만 쓸모없는 내용같네요. 그냥 크레머 공식 써서 교점 구하시면 됩니다.
예외 처리가 잘돼있네요 거기에 대해선 별로 주의깊지 못했습니다