如何正确旋转像素网格中的对象?

问题描述 投票:0回答:2

我有一个由 1D 数组制成的 2D 网格,具有 和 height 属性。在该网格中,我有一个盒子对象,我想将其旋转 X 度。 我使用这个公式来旋转网格中对象的每个像素:

newX = floor(cos(angle)*x - sin(angle)*y)
newY = floor(sin(angle)*x + cos(angle)*y)

当盒子很小时,它工作正常,但如果盒子更大,我会得到一些空单元格。我该如何填补应该填补的空白。 这是一个宽度和高度为 10 然后旋转 45 度的盒子的示例:
Example

javascript math
2个回答
0
投票

执行反向映射:

遍历结果的所有像素。您可以使用旋转图像的边界框并扫描其线条。

对于每个像素,都可以获得相应源像素的坐标。如果它们位于有效范围(源矩形)内,则将源颜色复制到结果中。

要得到反向映射公式,只需改变角度符号即可(如果你有纯旋转而不移位)

oldx = cos(angle)*newx + sin(angle)*newy
oldy = -sin(angle)*newx + cos(angle)*newy

0
投票

我也有同样的问题。我注意到这些像素没有丢失,但由于四舍五入而重叠

© www.soinside.com 2019 - 2024. All rights reserved.