在Java中旋转一个二维数组n度

3

我正在制作一个2D物理引擎,每当生成一个物体(比如椅子),它就会创建一个2D布尔数组,大小是原始图像的两倍(以便旋转),并创建与图像相同的形状(不包括不透明度小于1的像素)

如何将这个数组旋转x度?

将这x度中的真实值旋转,其中“this”可以是任何形状
f=false t=true

f f f f f f f
f f f f f f f
f f T T T f f
f f T T T f f
f f T T T f f
f f f f f f f
f f f f f f f
1个回答

2
这是一个基本的图像旋转算法,只不过您只是旋转了一个T/F位图,对吗?
从我的笔记中来看:

http://www.leptonica.com/rotation.html

http://datagenetics.com/blog/august32013/index.html

剪切旋转:
Catmull和Smith
非常快速;通过光栅运算实现。可以原地完成。
像素行的移动距离与它们与旋转中心的垂直距离成比例。一系列三个交替的水平、垂直、水平剪切执行旋转。对于小角度(<3度),可以用两个剪切完成。
失真可能会累积;如果您使用每次旋转12度的180次旋转旋转图像,则结果将被有效加密。但是,“解开”图像将恢复它。
R = [  cos(a) sin(a) ]
    [ -sin(a) cos(a) ]


  = [ 1  tan(a/2) ] [    1     0 ] [ 1  tan(a/2) ]
    [ 0     1     ] [ -sin(a)  1 ] [ 0      1    ]

注意:先以90度的步长旋转,使得a<=45。
我有一段类似的算法的 C 代码,可以对图像进行任意旋转、缩放和平移,都是使用整数运算,但它很复杂,也可能不适用于你的问题。
坦白地说,我建议你查找一下 Java 中是否已经有了实现;可以寻找 2D 图形库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接