Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memutar Titik Mengelilingi Titik Lain dalam 2D ​​Menggunakan Allegro?

Bagaimana untuk Memutar Titik Mengelilingi Titik Lain dalam 2D ​​Menggunakan Allegro?

Barbara Streisand
Barbara Streisandasal
2024-12-09 17:26:20969semak imbas

How to Rotate a Point Around Another Point in 2D Using Allegro?

Memutar Titik Mengenai Titik Lain dalam 2D

Dalam grafik komputer, memutar objek di sekeliling titik tertentu ialah operasi biasa. Dalam kes ini, anda menyasarkan untuk memutar 4 titik sudut kad menggunakan API Allegro. Untuk mencapai matlamat ini, pertimbangkan pendekatan berikut:

旋转点函数

Anda boleh melaksanakan fungsi yang dipanggil rotate_point untuk melaksanakan operasi putaran mengikut cara yang diingini. Ia mengambil parameter berikut:

  • cx dan cy: Koordinat X dan Y bagi titik pangsi
  • angleInRads: Sudut putaran dalam radian
  • p: Titik menjadi diputar

Pelaksanaan:

Fungsi rotate_point terlebih dahulu menolak titik pangsi daripada titik p yang diberi. Ini mengalihkan titik ke asal sistem koordinat. Seterusnya, ia melakukan putaran menggunakan sinus dan kosinus sudut putaran. Akhirnya, ia menambah kembali titik pangsi untuk mendapatkan titik diputar.

Kod:

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

Dengan menggunakan putaran ini pada 4 titik sudut kad, anda boleh membuat poligon berputar yang boleh digunakan untuk pengesanan perlanggaran.

Atas ialah kandungan terperinci Bagaimana untuk Memutar Titik Mengelilingi Titik Lain dalam 2D ​​Menggunakan Allegro?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn