>백엔드 개발 >C++ >2D 공간에서 다른 점 주위로 점을 어떻게 회전합니까?

2D 공간에서 다른 점 주위로 점을 어떻게 회전합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-07 15:58:11902검색

How Do You Rotate a Point Around Another Point in 2D Space?

2차원에서 다른 점을 중심으로 점 회전

이 기사에서는 2차원에서 다른 점을 중심으로 한 점의 회전을 계산하는 문제를 다룹니다. 치수. 이 작업은 카드가 펼쳐져 있는 카드 게임을 개발하는 과정에서 발생합니다. Allegro API의 al_draw_rotated_bitmap 기능은 손쉬운 카드 패닝을 용이하게 하지만 아래에 있는 카드를 가려서 마우스 상호 작용을 방해합니다. 이를 해결하기 위해 카드의 4개 점을 회전해야 하는 다각형 충돌 테스트가 제안되었습니다.

해결책은 다음 작업을 수행하는 회전 기능을 활용하는 것입니다.

  1. 점의 좌표에서 피벗점을 뺍니다.
  2. 점을 시계 반대 방향으로 회전합니다.
  3. 피벗점을 추가합니다. 해당 지점의 좌표로 돌아갑니다.

rotate_point 함수는 다음과 같이 구현됩니다.

POINT rotate_point(float cx, float cy, float angleInRads, POINT p)
{
  float s = sin(angleInRads);
  float c = cos(angleInRads);

  // translate point back to origin:
  p.x -= cx;
  p.y -= cy;

  // rotate point
  float xnew = p.x * c - p.y * s;
  float ynew = p.x * s + p.y * c;

  // translate point back:
  p.x = xnew + cx;
  p.y = ynew + cy;

  return p;
}

이 함수를 구현하면 카드의 4개 지점을 회전하여 결정할 수 있습니다. 어떤 카드가 마우스 아래에 있는지를 확인하여 카드 게임에서 효과적인 마우스 상호작용을 가능하게 합니다.

위 내용은 2D 공간에서 다른 점 주위로 점을 어떻게 회전합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.