您的“圆”的半径应为57.28996163075943
像素,可以通过以下方式计算:
import math
radius = math.sin(math.radians(89)) / math.sin(math.radians(1))
print('Radius of circle =', radius)
这个结论的原因在于你的圆并不是真正的圆形。它由360个不同的三角形组成。特别地,它们都是ASA(角度、边长、角度)三角形。假设当开始画你的圆时,你的海龟从圆的切线处开始。这意味着如果你画一条通过你正在绘制的圆的中心和绘图的海龟的线,你的海龟方向就会垂直于那条线。因此,我们可以说如下:
angle_a = 90
我们说我们所知道的三角形中第一个角度是90度。我们需要的下一个信息是一条边的长度。由于海龟绘制了1像素的线,我们知道这就是长度,可以将其添加到我们的笔记中:
angle_a = 90
side_c = 1
我们需要知道的最后一件事是另一个角度。这必须从先前的知识中推导出来,因为一开始可能不明显。在每个绘图步骤的开始,我们的海龟与圆上的切线平行;这意味着在将海龟旋转1度后,它已准备好开始下一个绘图步骤,并且必须处于切线上。因此,在绘图步骤结束时,应该可以通过沿着垂直于海龟面对方向的路径追踪回到圆的中心。由于进行了1度的转弯,我们知道正在制作的三角形的另一个角度必须为89度。
angle_a = 90
side_c = 1
angle_b = 89
由此我们可以得出结论,圆心三角形中的另一个角必须是1度。
angle_a = 90
side_c = 1
angle_b = 89
angle_c = 1
现在我们有了所有这些信息,我们可以使用正弦定理来找出三角形另外两条边的长度。我们将得到两个不同的值。第一个是斜边a的长度;第二个是半径b的长度。您会注意到,更长的长度是海龟在第一次绘图步骤后距离圆心的距离。为了计算半径,我选择了第二个测量值,它几乎没有任何区别。
现在是解决一些公式的时候了:
side_a / sin(angle_a) = side_c / sin(angle_c)
side_a / sin(90) = 1 / sin(1)
side_a = sin(90) / sin(1)
side_a = math.sin(math.radians(90)) / math.sin(math.radians(1))
side_b / sin(angle_b) = side_c / sin(angle_c)
side_b / sin(89) = 1 / sin(1)
side_b = sin(89) / sin(1)
side_b = math.sin(math.radians(89)) / math.sin(math.radians(1))
你也可以选择对边a和b的长度取平均值,以获得更好的圆半径近似值:
print('Radius of circle =', (side_a + side_b) / 2)
从这里,您将得到大约 57.29432506465481
作为像素的近似半径。
附录
在进一步研究此事后,很容易开发一个函数来帮助未来更轻松地解决这类问题。请注意,多边形不一定有直径,但是偶数边的多边形至少有两个互相平行的半径。使用以下函数获取半径只需将其结果除以二即可。示例用法已包括在内:
import math
def get_polygon_diameter(side_length, side_rotation):
return side_length / math.sin(math.pi * side_rotation / 360)
length_of_each_side = 1
rotation_per_side = 1
diameter = get_polygon_diameter(length_of_each_side, rotation_per_side)
radius = diameter / 2
print(f'Radius of "circle" that is actually a polygon = {radius:.3f} pixels')
360 = 2 * π * r
,因此r = 180 / π
。 - Barış Uşaklı