如果原地旋转,为什么图形的旋转会中断?
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):
看来旋转函数或浮点数的精度太低,无法多次旋转已旋转的形式。我将重写我的代码以始终从基本形式旋转。
我正在编写一个需要旋转多边形的游戏。我有一系列的点。我有一个围绕 (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):
看来旋转函数或浮点数的精度太低,无法多次旋转已旋转的形式。我将重写我的代码以始终从基本形式旋转。