Python: найти максимальное значение x и максимальное значение y в текстовом файле - PullRequest
0 голосов
/ 02 декабря 2011

У меня вопрос о поиске максимального значения 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.

У меня есть процедура, которая проверяет положение 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], а затем я проверю положение этих линий, и это необходимо в точке в алгоритме многоугольника, где будет посчитал точки пересечения. (пересечение между созданной линией, содержащей точку, и каждой линией многоугольника)

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Найти максимальные значения 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 голосов
/ 01 апреля 2013

Если вам нравится мощный код, вы хотели бы это :) Если у вас просто целые числа, вы можете заменить число с плавающей точкой на int.

file.txt

1 2 3 900000.029384 10000 6 8 900000.029383

максимум = максимум (карта (float, (open ('file.txt', 'r'). Readline ()). Split ()))

...