CCW 알고리즘 있잖아, 직선의 방향성 결정하는 문제, 몇달전에 배웠던 알고리즘이라서 기억에 남거든.
우리학교 과제로 이 문제가 나왔는데 CCW 알고리즘을 사용한다는 말을 안했거든(그냥 문제 설명만 해줌)
나는 이게 CCW 알고리즘을 이용한다고 바로 알아채서 이 알고리즘을 이용해서 풀었는데,
우리학교가 과제 제출할때 소스코드 표절검사와 풀이 표절검사를 한다고 했거든.
나는 솔직히 에디토리얼 보고 풀었고(소스코드는 직접 작성), 에디토리얼 없이는 못 풀거 같은데.. 솔직히 말해서 알고리즘 안했으면 이걸 기하로 보는 사람도 적을껄?
그냥 에디토리얼 보고 각색해서 설명을 적는게 나을까?
그리고, 다른 같은강의듣는 친구들은 일일히 좌표 IF문 떡칠하고, 2D 배열에 넣어보고, 복잡하게 풀고 조교한테 질문도 많이하던데...
이게 좌표를 이용해 다른 풀이가 존재할수가 있을까?
"에디토리얼 보고 설명을 적는 게 나을까?" 사실상 조교/교수의 채점기준에 대한 질문이라 여기있는 사람이 답해줄 수 있을 것 같진 않음. 나라면 딱히 표절로 여기지는 않겠지만 설명을 적는 건 나쁘지않을듯. 에디토리얼을 각색할 필요도 없을것같음. 각색할 게 있나?
데카르트 좌표를 극좌표로 바꿔서 푸는 좀 더 직접적인 풀이가 존재함
arctan 함수를 잘 사용해서 각도를 찾아서 비교하면 됨. 다만 이 방법은 부동소수점 오차가 있음
글에 문제 설명이 안되어있는데 x1 y1 x2 y2 x3 y3 이렇게 점 세개가 주어졌을때 직선이 시계방향으로 휘었는지 반시계방향으로 휘었는지 판단하는거맞지?
좌표평면에서 평행이동을 통해 x1 y1 을 0 으로 옮기는 게 가능함. 즉, 첫번째 점은 평면에서의 원점이라고 가정해도 무방함.
그러면 이제 문제는 (a, b) (c, d) 이 두 점 중에서 각 점에서 원점으로 직선을 그었을 때, 그 직선과 y=0 이 이루는 각도가 얼마인지, 그 각도를 비교하는 문제로 바뀜
이해했으면 그 풀이를 적으면 되는거 아님? 뭐 ccw가 고인물 알고리즘도 아니고. - dc App
(a,b) 와 y=0 이 이루는 각도를 x 라고 하면, tan x = b/a 가 됨. 즉, 역탄젠트 함수를 이용해서 x를 구할 수 있음. 이제 이 x를 비교하면됨.
아니다 꼭 그렇게까지 안 하고 걍 기울기인 b/a 를 비교하면 되겠구나 굳이 arctan 을 쓸 필요도 없이
1/2/3/4 사분면 각각 나눠서 케이스를 생각해서 기울기 비교하면될듯
ccw도 사실 본질적으로는 이런식의 기울기 비교임. 어차피 같은 식을 비교하게 될거임.
다른 풀이인 줄 알았는데 결국 ccw 와 같은거였네... arctan 함수를 써서 다른방법인줄 알았지만 사용된 성질은 결국 arctan 이 증가이다 (순서관계를 보존한다) 는 성질밖에 없음... 내생각에는 다른애들도 보통 기울기비교(=각도비교) 로 풀것같은데... 결국 ccw 랑 같은거네. ccw 랑 본질적으로 다른방법이 있을지 모르겠다.
벡터 AB (a1,a2)라하면 (-a2,a1)으로 바꿔서 BC랑 내적해도될거같음
이번 기회에 CCW 알고리즘이 어떻게 작동하는지 공부하면 그거로 보고서 다 쓰고도 남을걸
어떻게 작동하는진 다알음.. 외적 응용하거나 삼각형의 넓이 공식 응용하는거
그래 그거로 보고서를 써