我正在制作一个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
答案 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实现;寻找二维图形库。