jkjan   4년 전

제 방법은.. 진짜 직관적으로..

이중 포문을 돌리면서 두 직선이 만나면 그래프의 인접리스트에 추가하고

마지막에 dfs 를 돌리는 건데요

만나는 걸 어떻게 보느냐 하면..

두 직선의 방정식을 구해서

방정식의 계수에 따라서 평행, 일치 여부를 구하고..

일치면 그 선분이 만나긴 하는지

둘 다 아니면 교점이 두 선분 위에 존재하는지를 구하는 방법입니다.

직선의 방정식은 나눌 거 다 나눠주고.. ax + by = c 의 꼴입니다..

b는 1 또는 0의 값을 가집니다.


게시판에 있는 tc들은 다 맞긴 하는데...

도대체 어디가 잘못된 것인지 모르겠네요...

그리고 교점을 구하는 intersect 함수에서..

조건문에 걸리지 않는 경우가 있나 하고 제가 계속 체크를 해봤는데..

위의 평행, 일치 여부에서 판단되지 않는 방정식만 이 과정을 거치게 됩니다..

왜냐면 2, 2랑 3, 3 유형은 무조건 평행이어서 .. (y의 계수가 무조건 1 또는 0이기 때문)

또한 선분의 직선 방정식이.. 두 직선이 일치한다고 나올 때..

선분이 일단 안 겹치는지를 체크하는데

거기서 false로 return이 안 되면 무조건 겹친다고 봅니다.

자료형도 double 이기도 하고..

제가 논리적으로 어떻게 틀린 건지.. 잘 모르겠습니다..

그래도 함수로 모듈화는 해놓아서..

코드를 읽어보신다면 아마 문제점은 doTheyMeet나 intersect 함수의 조건문 속에 있지 않을까 싶습니다..

ha_ram   4년 전

실수를 가지고 연산하는것과 나눗셈을 하는것은 오차가 발생할 수 있습니다.

방정식으로 하지 마시고

구글에 검색해보면 CCW알고리즘이라고

선분의 교차여부를 판별하는 알고리즘이 있는데

이것으로 해보시는걸 추천합니다.

댓글을 작성하려면 로그인해야 합니다.