算法思想:先将相邻点连接,并计算出折线总长度,再找出所有相邻三个点的最大距离差值,总长度减去最大距离差值即为折线的最小长度。如图a所示,对于相邻的任意三点,有两种连法:一是从A点直接连到C点,二是从A点连到B点再连到C点,两种方法的距离差值为dist a + dist b - dist c。
完成该项目分以下几个步骤:
(1)读取坐标数据,分别存储在列表x和y中。点的坐标(x,y)保存在文本文件“point.txt”中(已按x坐标升序排列),数据格式如图b所示。划线处应填入代码为______
f=open("point,txt",'r') #从文件中读取坐标位置
x=[];y=[] #分别存储在列表x和y中
line=f.readline() #取出一行数据
while line:
data=line. split(",") #以逗号为分隔符转换成列表
x.append(int(data[0])) #添加到列表x中
line=f.readline()
f.close() #关闭文件
(2)编写函数,计算两点间的距离。请在划线处填入合适的代码。
from math import sqrt #函数sqrt的功能是计算平方根
def dist(x1,y1,x2,y2): #计算(x1,y1)到(x2,y2)的距离
d=
return d
(3)设计算法与程序实现。根据上述算法编写的Python程序如下,请在划线处填入合适的代码。
n=len(x);total=0
for i in range(l,n):
tota1+=
maxd=0
for i in range(2,n):
d1=dist(x[i-2],y[i-2],x[i-1],y[i-1])
d2=dist(x[i-l],y[i-1],x[i],y[i])
d3=dist(x[i-2],y[i-2],x[i],y[i])
if dx > maxd:
maxd = dx
print("折线的最小长度为:"+str(round(
同类型试题
y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2
y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2