사용자가 시도하려는 동작이 [dx, dy] 인 경우 선택 영역의 모서리에서 [dx, dy]로 번역 된 점 (아래 예의 노란색 선)을 고려하십시오. 이 선은 특정 지점 (빨간색 점)에서 회전 된 이미지 경계 (녹색 선)와 교차 할 수 있습니다. 교차로가 없으면 움직임이 합법적입니다. 하나 이상의 교차로가있는 경우 이동이 합법적 인 지점까지 알려줍니다. 원래 위치에 가장 가까운 교차점 (수평 또는 수직 거리를 확인하는 것으로 충분 함)이 최대 이동 (이 예에서 오른쪽 하단 모서리)을 결정합니다. 그런 다음이 지점으로 번역을 제한 할 수 있습니다. 에 따라
의 이동 방향은 사용자가 하나의 코너 (예에서는, 왼쪽 아래)를 검사 건너 뛸 수 (이 예에서는 상부 우측 방향)에 사분면; 다른 구석들은 항상 경계선 안으로 부딪 칠 것입니다.
움직임의 방향과 이미지의 회전 각도를 비교하여 두 경계 (이 예의 경우 왼쪽 및 아래쪽)를 확인하지 않고 건너 뛸 수 있습니다.
그래서 3 개의 선분과 2 개의 선분이 교차하는지 확인해야합니다. 선분 교차 코드는 예 : this question.
사용자가 한 면만 드래그하고 이동하는 대신 사각형을 확장하는 경우 움직이는 두 모서리 만 확인하면됩니다.
출처
2017-09-15 01:12:58
m69
확인을 내부 사각형의 네 모서리가 바깥 쪽 사각형 안에있는 경우. – alain
순진한 방법은 작은 직사각형의 각 선분을 검사하여 큰 직사각형의 모든 선분과 교차하는지 확인하는 것입니다. 회전 된 사각형에 대한 포인트가 있습니다 (회전 각도를 알고 있다고 가정). 16 라인 교차 테스트에 불과합니다. 최적은 아니지만 시작일뿐입니다. 선택 사각형의 왼쪽면이 회전 된 사각형의 오른쪽면과 교차 할 수 없기 때문에 몇 가지 가정을 할 수 있다면 테스트의 수를 줄일 수 있습니다. –