Python:在文本文件中查找最大x值和最大y值
我有个问题,关于如何在文本文件中找到最大的x值或y值。这对点在多边形算法中是很重要的。
多边形的坐标和一个点(这个点是在多边形内还是外)以及多边形的边数都保存在文本文件里。
举个例子:
5.0 4.0 6 1.0 1.0 4.0 0.0 6.0 3.0 7.0 6.0 3.0 7.0 0.0 4.0 1.0 1.0
这个点是 [5.0 4.0]
,多边形有 6
条边,接下来是多边形的各个点:
[1.0 1.0][4.0 0.0][6.0 3.0][7.0 6.0][3.0 7.0][0.0 4.0][1.0 1.0].
第一个是x坐标,第二个是y坐标。
我有一个程序可以测试两条线的位置。现在我需要把这个程序和另一个算法结合起来。
我现在的做法是:打开文本文件,读取每一行,然后把它们分开,保存到变量里。
pointinp = open ("pointinp.txt", "r")
for line in pointinp.readlines():
riadok = line.split()
j=3
for i in range (0,riadok[2]):
x1=float(riadok[0])
y1=float(riadok[1])
k1=float(riadok[i+j])
l1=float(riadok[i+(j+1)])
k2=float(riadok[i+(j+2)])
l2=float(riadok[i+(j+3)])
j=j+1
点的坐标保存在x1和y1里,其他点的坐标保存在k1,l1,k2,l2里。现在我需要从文本文件中找到最大的x和y坐标,并把它们保存到x2和y2里。这样我就会有两条线 [x1,y1][x2,y2] 和 [k1,l1][k2,l2],然后我会测试这些线的位置,这在点在多边形算法中是必要的,因为要计算交点(即包含点的线和多边形的每条边之间的交点)。
2 个回答
如果你喜欢强大的代码,你会喜欢这个 :)
如果你只处理整数,可以把浮点数(float)换成整数(int)。
1 2 3 900000.029384 10000 6 8 900000.029383
最大值 = max(map(float, (open('file.txt', 'r').readline()).split()))
在一条线中找到最大的x和y其实很简单,你只需要把它们分开,然后用max()函数来找出最大的值。幸运的是,Python的列表索引支持步长,所以你可以很方便地提取出每隔一个的值:
xvals=riadok[3::2]
yvals=riadok[4::2]
xmax=max(xvals)
ymax=max(yvals)
在文件中找到最大值就稍微复杂一些:对于每一行,你可以把当前的最大值和到目前为止找到的最大值进行比较,如果当前的值更大,就用它替换掉之前的最大值:
xtruemax=max(xtruemax,xmax)
ytruemax=max(ytruemax,ymax)
不过你会发现这些最大值会随着你逐行读取文件而慢慢增加。如果你想从第一行开始就找到真正的最大x和y值,那么你需要对文件进行两次处理,第一次是找出最大的x和y,第二次是应用你的算法。