>백엔드 개발 >C++ >2D에서 고정점을 중심으로 점을 어떻게 회전합니까?

2D에서 고정점을 중심으로 점을 어떻게 회전합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-08 15:21:12648검색

How Do I Rotate a Point Around a Fixed Point in 2D?

2D에서 고정점을 기준으로 점 회전

카드 게임에서 사실적인 카드 패닝 효과를 구현하려면 다음이 필요합니다. 회전 각도에 맞춰 카드 포인트의 좌표를 변환합니다. Allegro API는 비트맵 회전을 위한 편리한 기능을 제공하지만 충돌 감지를 위해서는 기본 수학적 연산을 이해하는 것이 중요합니다.

회전 변환 알고리즘

점을 회전하려면( x, y) 고정점(cx, cy)에 대해 각도 θ만큼, 다음을 따르세요. 단계:

  1. 피벗점 빼기: 회전할 점의 좌표에서 피벗점의 x 및 y 좌표를 뺍니다.

    dx = x - cx
    dy = y - cy
  2. 회전 적용 행렬: 회전 행렬을 적용하여 점을 각도 θ만큼 회전합니다.

    x_new = dx * cos(θ) - dy * sin(θ)
    y_new = dx * sin(θ) + dy * cos(θ)
  3. 피벗 점 뒤로 추가: x 및 y 좌표 추가 피벗 포인트를 다시 변환된 위치로 좌표:

    x = x_new + cx
    y = y_new + cy

구현

다음은 이 알고리즘을 사용하여 회전을 수행하는 C와 유사한 함수입니다.

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;
}

이제 이 기능을 사용하면 카드의 포인트를 회전하여 충돌 감지를 수행할 수 있습니다. 마우스 클릭 이벤트.

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

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