好的我有一小组用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度。
答案 0 :(得分: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)的正方形。
通过反向转换,您一定要确定新图像的每个像素的颜色一次。如果你“前进”,新图像中的某些像素将被多次击中,而有些像素根本不会被击中。这些像素根本没有被击中可能是你的“随机”像素 - 最终图像中的孔最终会出现默认颜色或者某些颜色。
答案 1 :(得分:0)
看起来正确。问题是准确的。中心附近的像素聚集起来,远处的像素散开。
您需要做的是插入像素,使其看起来平滑。
例如,当你旋转一个像素并且它在一个像素和另一个像素之间的中间结束时,但你将它绘制在一个像素上,当它真的应该是一半而另一半时,它就会出现问题。 (如果这有意义的话)。由于屏幕具有离散像素,因此您必须确定原始像素对新像素的贡献程度。
您可以通过查看计算坐标的小数部分来完成此操作。假设你的new_x是一个整数,那么你知道它对像素有贡献。但是说它的小数部分为0.25。这意味着大约25%的像素实际上位于下一个位置。 (取决于您如何定义像素原点)
由于您处理2D可能因为有8个可能的像素而更复杂。有些算法不同,可能效果更好(更快),但这种方法可行。