여러가지 연산들을 설명해놓은 글이에요


그리고 저도 잘 아는게 아니라 틀리거나 잘못된 내용이 있을수도 있어요






ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ






1. 겹쳐있는 두 선분을 밀어내기 위한 최소거리 구하기





3cec9e36ebd518986abce8954588706afc





위의 그림처럼 직선상에 두 선분이 주어져 있고, 두 선분의 최소 최대값이 각각 amn amx bmn bmx일때


우선 두 선분이 겹쳐져 있는지를 체크하려면 위의 그림의 첫번째 두번째에 나와있는 경우를 살펴보면 되요,


즉 amx < bmn 이거나 bmx < amn이면 두 선분은 서로 겹쳐지지 않아요




그리고 겹쳐진 두 선분을 서로 겹쳐지지 않을때까지 밀어내기 위한 최소 거리를 찾기 위해서는(여기서는 a선분을 고정시키고 b선분을 이동시켜요)


그림의 세번째 네번째에 나와있는 경우를 살펴보면 되요, 보라색은 bmx-amn 이고 b선분을 왼쪽으로 겹쳐지지 않을때까지 밀어내기 위한 거리에요


그리고 초록색은 amx-bmn이고 b선분을 오른쪽으로 겹쳐지지 않을때까지 밀어내기 위한 거리에요


즉, 둘중 더 값이 작은 방향으로 b선분을 이동시키면 되요, 다만 보라색이(왼쪽으로 이동) 더 작을 경우에는 -방향으로 이동시켜야 하니까 거리만큼 -방향으로 이동시켜야해요














2. 점과 각도를 수직이동시킨 위치 구하기







3cef9e36ebd518986abce895478871690a





위의 그림처럼 직선상에 점 a와 b가 주어져 있을때, b를 a기준으로 수직이동시킨 점 c의 위치는, 즉 a에서 b와의 거리만큼 반대방향으로 떨어진 점 c의 위치는


c= 2*a-b로 구할수 있어요, 그리고 이건 그림에 나와있는것처럼 좌우 방향 모두에 적용할수 있어요


그리고 이 연산은 그림의 아래에 나와있는것처럼 각도를 수직이동(대칭이동) 시킬때도 사용될수 있어요, 역시 a각도를 기준으로 b각도를 수직이동시켜서 나온 각도가 c라면 이때 c는 2*a-b가 되요












3. 두 각도 사이의 각도 구하기




3cee9e36ebd518986abce8954483766988






위의 그림처럼 각도 a와 b가 주어져 있을때 그 사이의 각도 c는


c = arccos(cos(a)*cos(b)+sin(a)*sin(b)) 로 구할수 있어요


그리고 이때 그 범위는 -180~+180도 범위 사이에서 나오게 되요


이건 벡터의 내적을 통한 사이의 각도를 구하는 방법을, 극좌표계의 거리와 각도 공식을 사용해서 두 각도가 주어진 경우로 변형한 거에요














4. 두 각도의 방향 구하기






3ce99e36ebd518986abce8954586766f3c






위의 그림처럼 각도 a와 b가 주어져 있을때,


각도 b가 a를 기준으로 +방향에 있으면(그림의 왼쪽) cos(a)*sin(b)-sin(a)*cos(b) 가 0보다 크고 


-방향에 있으면(그림의 오른쪽) cos(a)*sin(b)-sin(a)*cos(b) 가 0보다 작아요,


만약 cos(a)*sin(b)-sin(a)*cos(b) 가 0이라면 두 각도가 동일하거나 정반대방향(180도) 에 있는 경우에요


이건 벡터의 외적을 통한 방향체크를 극좌표계의 거리와 각도 공식을 사용해서 두 각도가 주어진 경우로 변형한 거에요