Python:在文本文件中查找最大x值和最大y值

0 投票
2 回答
3072 浏览
提问于 2025-04-17 07:33

我有个问题,关于如何在文本文件中找到最大的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 个回答

0

如果你喜欢强大的代码,你会喜欢这个 :)
如果你只处理整数,可以把浮点数(float)换成整数(int)。

file.txt

1 2 3 900000.029384 10000 6 8 900000.029383

最大值 = max(map(float, (open('file.txt', 'r').readline()).split()))

2

在一条线中找到最大的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,第二次是应用你的算法。

撰写回答