2011-12-02 66 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的())。分裂()))