2016-04-10 28 views
1

Üçgenimi döndürmek istiyorum ancak bazı sorunlar var. Üçgen döndürme deformasyona neden oluyor

Onun varsayılan form: enter image description here

benim ok tuşlarıyla dönen ediyorum ama üçgen şeklinde bazı deformasyonlar vardır Gördüğünüz gibi:

typedef struct { 
point_t pos; // position of the triangle 
float angle; // view angle 
float r; 
} weapon_t; 


void drawPlayer(weapon_t tw) { 

glBegin(GL_TRIANGLES); 
glColor3f(0.1, 0.2, 0.3); 
glVertex2f(tw.pos.x, tw.pos.y); 
glVertex2f(tw.pos.x + 150 * cos(tw.angle * D2R), tw.pos.y + 100 * sin(tw.angle * D2R) + 8); 
glVertex2f(tw.pos.x + 150 * cos(tw.angle * D2R), tw.pos.y + 100 * sin(tw.angle * D2R) - 8); 
glEnd(); 
} 

void onTimer(int v) { 

glutTimerFunc(TIMER_PERIOD, onTimer, 0); 

if (right) { 
    if (weapon.angle != -45) 
     turnWeapon(&weapon, -3); 
} 
if (left) { 
    if (weapon.angle != 45) 
     turnWeapon(&weapon, 3); 
} 
: Burada enter image description here

benim kodudur

Fikriniz var mı?

cevap

3

Formüllerinizi nereden aldığınızı bilmiyorum ama yanılıyorlar. Bir 2B vektörünü, x açısı etrafında saat yönünün tersine döndürmek için, döndürme matrisini kullanabilirsiniz [cos (x), -sin (x); sin (x), cos (x)] (bunu kolayca exp(i*x) = cos(x) + i*sin(x) ile ispatlayabilirsiniz). Vektörleri [150, 108] ve [150, 92] döndürmek istiyorsanız, döndürme matrisi ile çarptığınızda [150 * cos (x) - 108 * sin (x), 150 * sin (x) + 108 * cos (x)] ve [150 * cos (x) - 92 * sin (x), 150 * sin (x) + 92 * cos (x)].

koduna çevrildi Bu şuna benzer: abi yardımcı olduğunuz için

float c = cos(tw.angle * D2R); 
float s = sin(tw.angle * D2R); 
glVertex2f(tw.pos.x + 150*c - 108*s, tw.pos.y + 150*s + 108*c); 
glVertex2f(tw.pos.x + 150*c - 92*s, tw.pos.y + 150*s + 92*c); 
+0

sayesinde benim ders eğitmenden formüller aldı :) i şöyle değişti: glVertex2f (tw.pos.x + 150 * c- 8 * s, ikiyönlü + 150 * s + 8 * c); \t glVertex2f (tw.pos.x + 150 * c + 8 * s, tw.pos.y + 150 * s - 8 * c); ve tamamen çalışıyor. –