SORU
13 ŞUBAT 2010, CUMARTESİ


Başka bir nokta bir nokta (2D)dönen

Kartları fan dışarı nerede bir kart oyunu yapmaya çalışıyorum. Doğru görüntülemek için şimdi bir işleve sahip: Allegro API kullanarak Im

al_draw_rotated_bitmap(OBJECT_TO_ROTATE,CENTER_X,CENTER_Y,X
        ,Y,DEGREES_TO_ROTATE_IN_RADIANS);

bu benim fan kolayca etki yapabilir. O zaman sorun fare altında olduğunu bilmek. Bunu yapmak için çokgen çarpışma testi yapmayı düşündüm. Sadece kart üzerinde 4 puan çokgen telafi etmek için döndürmek için nasıl emin değilim. Ben temelde Allegro ile aynı işlemi yapmak gerekiyor.

örneğin, kartın 4 puan

card.x

card.y

card.x   card.width

card.y   card.height

Gibi bir işlev gerekir:

POINT rotate_point(float cx,float cy,float angle,POINT p)
{
}

Teşekkürler

CEVAP
13 ŞUBAT 2010, CUMARTESİ


Çok basit, ilk pivot noktası (cy C) çıkarın,sonra döndürün ve tekrar ekleyin.

test edilmemiş:

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

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

Rotasyon tam olarak rotasyonu berbat ettim ters tarafı ise. Bu durumda:

  float xnew = p.x * c   p.y * s;
  float ynew = -p.x * s   p.y * c;

(Hangi şekilde hatırlayacağım bir gün doğru olduğunu umalım).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MaximumPCMag

    MaximumPCMag

    23 Temmuz 2010
  • PremiumBeat.com - Royalty Free Music

    PremiumBeat.

    16 Kasım 2008
  • TechBalance

    TechBalance

    12 HAZİRAN 2011