如果原地旋转,为什么图形的旋转会中断?

Why rotation of a figure breaks if rotating in place?

我正在编写一个需要旋转多边形的游戏。我有一系列的点。我有一个围绕 (0,0) 原点函数的旋转:

x, y = xy
xx = x * math.cos(radians) + y * math.sin(radians)
yy = -x * math.sin(radians) + y * math.cos(radians)

return xx, yy

我试过像这样原地旋转:

Figure = np.array(((0,8), (8,-8), (0,0), (-8,-8)))

for i in range(7):
    for i, point in enumerate(Figure):
        Figure[i] = rotate_origin_only(point, math.radians(33))
    plt.fill(*list(zip(*Figure)))

plt.show()

但是我的东西坏了

但是,如果我使用临时列表,如下所示:

Figure = np.array(((0,8), (8,-8), (0,0), (-8,-8)))

for i in range(80):
    temp = []
    for point in Figure:
        temp.append(rotate_origin_only(point, math.radians(33 * i)))
    plt.fill(*list(zip(*temp)))

plt.show()

一切正常。 为什么?

你好像漏掉了第一个算法中的一个* i
在第一个算法中:

Figure[i] = rotate_origin_only(point, math.radians(33))

第二个:

temp.append(rotate_origin_only(point, math.radians(33 * i)))

此外,您在嵌套的 for 循环中使用了两次 i。这是一种糟糕的编码习惯,可能会导致混淆。通常第二个循环变量被称为j,像这样:

for i in range(7):
    for j, point in enumerate(Figure):

看来旋转函数或浮点数的精度太低,无法多次旋转已旋转的形式。我将重写我的代码以始终从基本形式旋转。