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
4

1 回答 1

2

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

从我的笔记中:

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

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

剪切旋转:

卡特穆尔和史密斯

非常快; 由光栅实现。可以就地完成。

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

扭曲会累积;如果您使用 180 次旋转 12 度旋转图像,则结果将被有效加密。但是,“展开”图像会恢复它。

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 实现;寻找二维图形库。

于 2013-06-01T17:33:10.767 回答