2011-12-02 52 views
0

最大的x值和最大y值我对自己在文本文件中查找最大x或y值的问题。这对于多边形算法中的点是必需的。
多边形与点一起的文本文件,即或缩小多边形与多边形的行数一起进入。的Python:查找文本文件

例如:

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坐标。

我有测试的2条线的位置的过程。现在我必须将这个过程与这一个算法结合起来。

我拥有的是:TXT TXT的读线打开,然后把它分解和值保存到变量

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。 于是我将有2行[X1,Y1] [X2,Y2]和[K1,L1] [K2,L2],然后我将测试这些线的位置,这是必要的点在多边形算法,其中将被计数的交叉点。

回答

1

Findind最大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,一次应用你的算法。

+0

我不知道如果我的理解是不够的。确切地说,我理解它的原理,但不知道它是如何做到的 - 在文件中查找局部最大值并对其进行比较。代码的外观如何?它会与所有值进行比较(所以x会与y比较),还是? – sven26

+0

使用与之前相同的示例: '用于pointinp中的行。readlines方法(): riadok = line.split() xvals = riadok [3:2] yvals = riadok [4:2] XMAX = MAX(xvals) YMAX = MAX(yvals) xtruemax = MAX (xtruemax,XMAX) ytruemax = MAX(ytruemax,YMAX) pointinp.seek(0)pointinp.readlines 线路(): <你的代码在这里>” 无论您比较XMAX x和y或只是ÿ取决于您的应用程序的性质。 – Dave

+0

好吧,这出现了丑陋,原谅我的格式不足。 – Dave

0

如果你喜欢功能强大的代码,你会喜欢这个:) 如果你只是有你可以通过INT替代浮点整数。

file.txt的

1 2 3 900000.029384 10000 6 8 900000.029383

最大=最大(图(浮筒,(开( 'file.txt的', 'R')。readline的())。分裂()))