类似的问题以前在这里也有,但没有一个简单到让我理解的程度。下面的代码以相等的角度间隔计算椭圆的点,并将相邻点之间的距离相加,得到近似的周长。然后,它将圆周分成10个假定相等的弧,并输出由分界点形成的角。在
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" %d
onetenth = d/10
angle = 0
x0 = a
y0 = 0
angle0 = 0.25
for i in range(10):
dist = 0
while(dist<onetenth):
x = a * cos(radians(angle))
y = b * sin(radians(angle))
dist += distance(x0,y0,x,y)
x0 = x
y0 = y
angle += 0.25
print "%d : angle = %.2f\tdifference = %.2f" %(i+1,angle-0.25, angle-angle0)
angle0 = angle
其输出:
^{pr2}$但是这些角度并不能平均地划分圆周(picture)。我的逻辑/代码有什么问题,如何改进?在
程序将椭圆分成等长的圆弧,而不是等长的圆弧。在椭圆上,这是不一样的。在下面的代码中,我将每个段的距离添加到输出中以验证这一点。在
样本输出:
^{pr2}$请注意,如果将椭圆更改为圆(即a=b=5),则角度和距离将变得一致:
我还对代码做了一些小的调整。首先,我将循环中angle变量的增量移动到计算之前。在最后一次通过时,角度在所有计算完成后获得额外的增量。为了减少最终结果中的误差,我还使增量值变小。在
我是这个问题的负责人,我从评论中意识到我做了一个错误的假设。该程序利用椭圆参数方程计算x、y坐标。参数方程中的角度不是与x轴形成的角度。我以为它们在代码里是一样的。正确的代码是
它通过取点的x和y坐标的反正切来计算与x轴的夹角。其输出:
^{pr2}$这些角把椭圆almost equally的周长分开。在
相关问题 更多 >
编程相关推荐