java旋转效果代码 java旋转图片保持大小不变

将一个二维数组旋转90度 用Java编写代码#includestdio.h
#define N 4
int a[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
void prt()
{int i,j;
for(i=0;iN;i++)
{
for(j=0;jN;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
int main()
{int i,j,k,t;
printf("原来的数组:\n");
prt();
for(i=0;i=N/2;i++)
for(j=i;jN-i-1;j++)
{
t=a[i][j];
a[i][j]=a[j][N-1-i];
a[j][N-1-i]=a[N-1-i][N-1-j];
a[N-1-i][N-1-j]=a[N-1-j][i];
a[N-1-j][i]=t;
}
printf("\n顺时针旋转90度后的数组:\n");
prt();
getch();
return 0;
}
Java代码如何实现炮台旋转,求代码例子实现方式有很多如果你用我提供给你java旋转效果代码的估计到时候你的绘制或者碰撞可能也要改
我用的方法是用一个矩阵存旋转角度以及当前位置等相关信息 可能有点复杂
/** 设置朝向为指定弧度 */
public void setOrientation(double orientation) {
if (this.orientation == orientation) {
return;
}
if (points != null) {
double x, y;
double sin = Math.sin(orientation - this.orientation);
double cos = Math.cos(orientation - this.orientation);
for (int i = 1; ipoints.length; i += 2) {
x = points[i - 1] - gravity.x;
y = points[i] - gravity.y;
points[i - 1] = x * cos - y * sin + gravity.x;
points[i] = x * sin + y * cos + gravity.y;
}
setBounds();
}
matrix.translate(center.x, center.y);
matrix.rotate(orientation - this.orientation);
matrix.translate(-center.x, -center.y);
this.orientation = orientation;
}
public void paint(World world, Graphics2D g2d, AffineTransform at) {
at.setTransform(matrix.m00, matrix.m10, matrix.m01, matrix.m11, matrix.m02, matrix.m12);
g2d.drawRenderedImage(image, at);
at.setTransform(head.matrix.m00, head.matrix.m10, head.matrix.m01, head.matrix.m11, head.matrix.m02,
head.matrix.m12);
g2d.drawRenderedImage(head.image, at);
}
public void move() {
double x = Camera.getXOnWorld();
double y = Camera.getYOnWorld();
Vector.VECTOR.set(head.gravity.x, head.gravity.y);
head.matrix.transform(Vector.VECTOR);
head.setOrientation(Math.atan2(y - Vector.VECTOR.y, x - Vector.VECTOR.x));
move(SystemEvent.VK_W, SystemEvent.VK_S, SystemEvent.VK_A, SystemEvent.VK_D);
}

你如果只要求看起来是旋转的效果且炮台不再移动的话建议你用Graphics2D的下面这个方法用完之后麻烦再调用一次方向前面加个负号转回去就没啥问题java旋转效果代码了
public abstract void rotate(double theta,
double x,
double y)
将当前的 Graphics2D Transform 与平移后的旋转转换连接 。后续呈现的变换如下:平移到指定位置,旋转指定弧度,然后向回平移相同的距离 。这等同于以下调用序列:translate(x, y);
rotate(theta);
translate(-x, -y);
使用正角度 theta 进行旋转,可将正 x 轴上的点转向正 y 轴 。
参数:theta - 旋转的角度,以弧度为单位x - 旋转原点的 x 坐标y - 旋转原点的 y 坐标
在这段java代码--俄罗斯方块,方块是怎么旋转的?贴出来的代码还不够,不过已经基本能回答你的问题了
我的推理过程:从(turnstate+1)%4可以看出,turnstate是一个数字,取值只有0123,因此它仅仅是一个标识符 , 0123四种取值分别标记着这个方块处于原状,旋转90度,180度或者270度 。然后blow函数应该是一个判断旋转之后会不会出现和已有方块重叠的函数 。
因此,这个turn函数的功能是:把标识符变成下一个状态,然后判断如果旋转,会不会和已有的方块重叠,如果重叠,就取消这个旋转标记的改变 。

推荐阅读