我想使用Allegro 4库创建一个line()对象。
circle( buffer, xm=xm+xx, ym=ym+yy, r=r+q, c0);
line( buffer, xm , ym-30, xm+15, ym-15, c0 );
line( buffer, xm+15, ym-15, xm+5, ym-15, c0 );
line( buffer, xm+5, ym-15, xm+5, ym+30, c0 );
line( buffer, xm+5, ym+30, xm-5, ym+30, c0 );
line( buffer, xm-5, ym+30, xm-5, ym-15, c0 );
line( buffer, xm-5, ym-15, xm-15, ym-15, c0 );
line( buffer, xm-15, ym-15, xm , ym-30, c0 );
这些线在圆圈内创建一个箭头。我想在那个圈子里旋转那个箭头。
答案 0 :(得分:1)
这是基本几何,真的。
newX = x*cos(theta) - y*sin(theta)
newY = y*cos(theta) + x*sin(theta)
将从原点(0,0)以角度x
旋转点y
和theta
,并将新坐标存储在newX
和newY
中。将其扩展为从中心旋转就像从x
和y
坐标中减去中心坐标一样简单,然后再次添加到结果中:
newX = (x-centerX)*cos(theta) - (y-centerY)*sin(theta) + centerX
newY = (y-centerY)*cos(theta) + (x-centerX)*sin(theta) + centerY
因此,您将在箭头的每个点上调用的函数将是这样的:
void rotate(float x, float y, float r,
float theta, float centerX, float centerY,
float &newX, float &newY){
newX = (x-centerX)*cos(theta) - (y-centerY)*sin(theta) + centerX;
newY = (y-centerY)*cos(theta) + (x-centerX)*sin(theta) + centerY;
}