我有一个由 1D 数组制成的 2D 网格,具有 和 height 属性。在该网格中,我有一个盒子对象,我想将其旋转 X 度。 我使用这个公式来旋转网格中对象的每个像素:
newX = floor(cos(angle)*x - sin(angle)*y)
newY = floor(sin(angle)*x + cos(angle)*y)
当盒子很小时,它工作正常,但如果盒子更大,我会得到一些空单元格。我该如何填补应该填补的空白。
这是一个宽度和高度为 10 然后旋转 45 度的盒子的示例:
执行反向映射:
遍历结果的所有像素。您可以使用旋转图像的边界框并扫描其线条。
对于每个像素,都可以获得相应源像素的坐标。如果它们位于有效范围(源矩形)内,则将源颜色复制到结果中。
要得到反向映射公式,只需改变角度符号即可(如果你有纯旋转而不移位)
oldx = cos(angle)*newx + sin(angle)*newy
oldy = -sin(angle)*newx + cos(angle)*newy
我也有同样的问题。我注意到这些像素没有丢失,但由于四舍五入而重叠