<p>程序将椭圆分成等长的圆弧,而不是等长的圆弧。在椭圆上,这是不一样的。在下面的代码中,我将每个段的距离添加到输出中以验证这一点。在</p>
<pre><code>from math import sqrt,cos,sin,radians
def distance(x1,y1,x2,y2):
return sqrt((x2-x1)**2 + (y2-y1)**2)
a = 5
b = 3
x0 = a
y0 = 0
angle = 0
d = 0
while(angle<=360):
x = a * cos(radians(angle))
y = b * sin(radians(angle))
d += distance(x0,y0,x,y)
x0 = x
y0 = y
angle += 0.25
print("Circumference of ellipse = {:f}".format(d))
onetenth = d/10
angle = 0
x0 = a
y0 = 0
angle0 = 0
for i in range(10):
dist = 0
while(dist<onetenth):
angle += 0.025
x = a * cos(radians(angle))
y = b * sin(radians(angle))
dist += distance(x0,y0,x,y)
x0 = x
y0 = y
print(
"{} : angle = {:.2f}\tdifference = {:.2f}\tDistance {:.2f}"
.format(i+1,angle, angle-angle0,dist))
angle0 = angle
</code></pre>
<p>样本输出:</p>
^{pr2}$
<p>请注意,如果将椭圆更改为圆(即a=b=5),则角度和距离将变得一致:</p>
<pre><code>Circumference of ellipse = 31.415902
1 : angle = 36.00 difference = 36.00 Distance 3.14
2 : angle = 72.00 difference = 36.00 Distance 3.14
3 : angle = 108.00 difference = 36.00 Distance 3.14
4 : angle = 144.00 difference = 36.00 Distance 3.14
5 : angle = 180.00 difference = 36.00 Distance 3.14
6 : angle = 216.00 difference = 36.00 Distance 3.14
7 : angle = 252.00 difference = 36.00 Distance 3.14
8 : angle = 288.00 difference = 36.00 Distance 3.14
9 : angle = 324.00 difference = 36.00 Distance 3.14
10 : angle = 360.00 difference = 36.00 Distance 3.14
</code></pre>
<p>我还对代码做了一些小的调整。首先,我将循环中<strong>angle</strong>变量的增量移动到计算之前。在最后一次通过时,<strong>角度</strong>在所有计算完成后获得额外的增量。为了减少最终结果中的误差,我还使增量值变小。在</p>