干杯!
typedef struct _Cannon {
int x, y, w, h;
}Cannon;
typedef struct _Ball{
int itx, ity; //size
float ix, iy; //position
float vx, vy; //velocity
float gr; //gravity
}Ball;
Cannon cannon = {60, 400, 114, 33};
Ball ball = {
0,0,
cannon.x+cannon.w*0.8,cannon.y+cannon.h/5,
17.0, 0,
0.3
};
XSetForeground(XApp->getDisplay(), GCAtr->getGC(),
GCAtr->getColor(2));
XFillRectangle(XApp->getDisplay(), XApp->getWindow(), GCAtr->getGC(),cannon.x,cannon.y,cannon.w,cannon.h);
void calculate()
{
double dt;
dt = XApp->getDifTime();
//Calculates the position of the ball
ball.vy += ball.gr * dt;
ball.iy += ball.vy * dt;
ball.ix += ball.vx * dt;
}
答案 0 :(得分:0)
XFillRectangle
仅适用于轴平行矩形。对于任意旋转的矩形,请使用XFillPolygon
。
您需要自己计算旋转矩形的顶点坐标。这不是二维几何中线性变换的教程,但简单地说,您需要这样做:
使用旋转矩阵
按角度θ应用旋转 cos θ sin θ
-sin θ cos θ
到每个角落。这将旋转原点周围的角落。