我正在制作一个 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
这是一个基本的图像旋转算法,除了你只是旋转一个 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 实现;寻找二维图形库。