在java中旋转一个2维数组n度

时间:2013-06-01 17:02:58

标签: java math rotation

我正在制作一个2d物理引擎,当产生一个物体(如椅子)时,它会创建一个2d布尔数组,大小是原始图像的两倍(允许旋转)并创建一个相同的形状图像(不包括难度小于1的像素)

如何将此数组旋转x度?

旋转此x度的真值,其中“this”可以是任何形状 f =假t =真

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 个答案:

答案 0 :(得分:2)

这是一个基本的图像旋转算法,除了你只是旋转一个T / F位图,对吗?

从我的笔记:

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

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

剪切旋转:

Catmull&史密斯

非常快;由rasterops实现。可以在适当的地方完成。

像素行移动的距离与其垂直方向成比例   距离旋转中心的距离。一系列三个交替   H,V,H剪刀执行旋转。对于小角度(<3度),   它可以用两把剪刀完成

扭曲可以累积;如果你要使用旋转图像   每次旋转180度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°的步长旋转,使得<= 45


我有一个类似算法的C代码,它可以对图像进行任意旋转,缩放和转换,所有这些算法都使用整数数学,但它很大而且很粗糙,可能不适合你的问题。

坦率地说,我只是环顾四周,看看是否已经有了Java实现;寻找二维图形库。