关于旋转xy像素坐标的帮助,我对我的函数不确定

1 投票
2 回答
2974 浏览
提问于 2025-04-16 10:24

我有一小组像素(一个字符),它们的坐标是xy格式的。现在我想把这个图像围绕它的中心点旋转,比如说105度。

这样做对吗?

每个像素到中心点的距离就是它的半径。

然后在Python代码中:

new_x = avg_pos_x+(math.cos(math.radians(105))*radius)
new_y = avg_pos_y-(math.sin(math.radians(105))*radius)

看起来是有效的,但有些像素的位置似乎有点随机。

编辑:我忘了提到,为了把每个像素旋转105度,我还计算了中心点和像素之间的角度,然后在这个角度上加上105度。

2 个回答

1

与其去搞清楚原始图像中的每个像素应该放在哪里,不如先弄明白新图像中的每个像素是从哪里来的。你可以通过将图像逆时针旋转105度来实现这一点。

old_x = avg_pos_x+(math.cos(math.radians(-105))*radius)
old_y = avg_pos_y-(math.sin(math.radians(-105))*radius)

然后把原来位置(old_x, old_y)的颜色复制到新位置(x, y)。如果你愿意,这里可以进行插值处理,比如对围绕(old_x, old_y)的四个像素的颜色进行加权平均。

通过反向进行这个转换,你可以确保新图像中的每个像素的颜色只会被计算一次。如果你是“正向”处理的话,新图像中的某些像素可能会被计算多次,而有些像素则根本不会被计算到。这些没有被计算到的像素可能就是你最终图像中的“随机”像素——它们会变成默认颜色,或者出现一些空白。

0

看起来没问题。问题在于准确性。靠近中心的像素会聚在一起,而远离中心的像素则会分散开。

你需要做的是对像素进行插值处理,这样看起来才会更平滑。

举个例子,当你旋转一个像素,它可能会落在两个像素之间的某个位置,但你却只在一个像素上显示它,这样就会出现问题。实际上,它应该是分别占据两个像素的一半。(希望这样说能让你明白)

因为屏幕上的像素是离散的,你需要确定原始像素有多少部分贡献给新的像素。

你可以通过查看计算出来的坐标的小数部分来做到这一点。比如说你的新_x是一个整数,那么你就知道它完全贡献给这个像素。但是如果它的小数部分是0.25,这就意味着这个像素有25%实际上是在下一个位置上。(这取决于你如何定义像素的起点)

由于你处理的是二维的情况,所以会更复杂,因为你有8个可能的像素。市面上有一些算法处理方式不同,可能会更好(更快),但这种方法是可以工作的。

撰写回答