2162번 - 선분 그룹
제 방법은.. 진짜 직관적으로..
이중 포문을 돌리면서 두 직선이 만나면 그래프의 인접리스트에 추가하고
마지막에 dfs 를 돌리는 건데요
만나는 걸 어떻게 보느냐 하면..
두 직선의 방정식을 구해서
방정식의 계수에 따라서 평행, 일치 여부를 구하고..
일치면 그 선분이 만나긴 하는지
둘 다 아니면 교점이 두 선분 위에 존재하는지를 구하는 방법입니다.
직선의 방정식은 나눌 거 다 나눠주고.. ax + by = c 의 꼴입니다..
b는 1 또는 0의 값을 가집니다.
게시판에 있는 tc들은 다 맞긴 하는데...
도대체 어디가 잘못된 것인지 모르겠네요...
그리고 교점을 구하는 intersect 함수에서..
조건문에 걸리지 않는 경우가 있나 하고 제가 계속 체크를 해봤는데..
위의 평행, 일치 여부에서 판단되지 않는 방정식만 이 과정을 거치게 됩니다..
왜냐면 2, 2랑 3, 3 유형은 무조건 평행이어서 .. (y의 계수가 무조건 1 또는 0이기 때문)
또한 선분의 직선 방정식이.. 두 직선이 일치한다고 나올 때..
선분이 일단 안 겹치는지를 체크하는데
거기서 false로 return이 안 되면 무조건 겹친다고 봅니다.
자료형도 double 이기도 하고..
제가 논리적으로 어떻게 틀린 건지.. 잘 모르겠습니다..
그래도 함수로 모듈화는 해놓아서..
코드를 읽어보신다면 아마 문제점은 doTheyMeet나 intersect 함수의 조건문 속에 있지 않을까 싶습니다..
실수를 가지고 연산하는것과 나눗셈을 하는것은 오차가 발생할 수 있습니다.
방정식으로 하지 마시고
구글에 검색해보면 CCW알고리즘이라고
선분의 교차여부를 판별하는 알고리즘이 있는데
이것으로 해보시는걸 추천합니다.
댓글을 작성하려면 로그인해야 합니다.
jkjan 4년 전
제 방법은.. 진짜 직관적으로..
이중 포문을 돌리면서 두 직선이 만나면 그래프의 인접리스트에 추가하고
마지막에 dfs 를 돌리는 건데요
만나는 걸 어떻게 보느냐 하면..
두 직선의 방정식을 구해서
방정식의 계수에 따라서 평행, 일치 여부를 구하고..
일치면 그 선분이 만나긴 하는지
둘 다 아니면 교점이 두 선분 위에 존재하는지를 구하는 방법입니다.
직선의 방정식은 나눌 거 다 나눠주고.. ax + by = c 의 꼴입니다..
b는 1 또는 0의 값을 가집니다.
게시판에 있는 tc들은 다 맞긴 하는데...
도대체 어디가 잘못된 것인지 모르겠네요...
그리고 교점을 구하는 intersect 함수에서..
조건문에 걸리지 않는 경우가 있나 하고 제가 계속 체크를 해봤는데..
위의 평행, 일치 여부에서 판단되지 않는 방정식만 이 과정을 거치게 됩니다..
왜냐면 2, 2랑 3, 3 유형은 무조건 평행이어서 .. (y의 계수가 무조건 1 또는 0이기 때문)
또한 선분의 직선 방정식이.. 두 직선이 일치한다고 나올 때..
선분이 일단 안 겹치는지를 체크하는데
거기서 false로 return이 안 되면 무조건 겹친다고 봅니다.
자료형도 double 이기도 하고..
제가 논리적으로 어떻게 틀린 건지.. 잘 모르겠습니다..
그래도 함수로 모듈화는 해놓아서..
코드를 읽어보신다면 아마 문제점은 doTheyMeet나 intersect 함수의 조건문 속에 있지 않을까 싶습니다..