我正在制作一个二维物理引擎,每当生成一个对象(如椅子)时,它都会创建一个两倍于原始图像大小的二维 boolean 数组(以允许旋转)并创建一个与图片(不包括不透明度小于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
最佳答案
这是一个基本的图像旋转算法,只不过您只是在旋转 T/F 位图,对吗?
来 self 的笔记:
http://www.leptonica.com/rotation.html
http://datagenetics.com/blog/august32013/index.html
剪切旋转:
卡特穆尔与史密斯
非常快;由 rasterops 实现。可以就地完成。
像素行移动的距离与其垂直方向成正比 离旋转中心的距离。三个交替的序列 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 实现;寻找二维图形库。
关于java - 在java中旋转一个二维数组n度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16875067/