Преобразование пространственных координатPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Преобразование пространственных координат

Сообщение Anonymous »

У меня есть код Python, который я использую для угадывания точек в воздушном пространстве. Это работает очень хорошо. Я использую текстовый файл, в котором точки указаны с их координатами. В настоящее время точки идентифицируются по таким координатам:
BORAS 770 624.
Мне нужно сделать то же самое, но с использованием другого txt. файл, в котором точки имеют географическую привязку, например:
BORAS 441327N 0100414E.

Код: Выделить всё

import tkinter as tk
from tkinter import messagebox, Canvas
import os

# Funzione per leggere le parole e le coordinate dal file coordinate_punti.txt
def load_words_from_file(filename):
if os.path.exists(filename):
with open(filename, 'r') as file:
lines = file.readlines()
words = []
for line in lines:
parts = line.split()
if len(parts) >= 3:  # Verifica che ci siano almeno 3 elementi
word = parts[0].strip().lower()  # La parola è il primo elemento
try:
# Recupera le coordinate e converte in interi
coordinates = (int(parts[1]), int(parts[2]))
words.append((word, coordinates))  # Aggiungi parola e coordinate come tuple
except ValueError:
messagebox.showwarning("Errore", f"Coordinate non valide per la parola '{word}'")
else:
messagebox.showwarning("Errore", "Formato non valido nella riga: " + line)
return words
else:
messagebox.showerror("Errore", f"Il file {filename} non esiste!")
return []

# Funzione per normalizzare le coordinate
def normalize_coordinates(words_data, canvas_width=600, canvas_height=450):
# Estrai le coordinate
x_values = [coord[1] for _, coord in words_data]
y_values = [coord[0] for _, coord in words_data]

# Trova i valori massimi e minimi
x_min, x_max = min(x_values), max(x_values)
y_min, y_max = min(y_values), max(y_values)

# Normalizza le coordinate
normalized_words = []
for word, (x, y) in words_data:
# Normalizzazione
x_normalized = ((x - x_min) / (x_max - x_min) * (canvas_width - 40) + 20) - 50  # Centrare verso sinistra
y_normalized = (y - y_min) / (y_max - y_min) * (canvas_height - 40) + 20
normalized_words.append((word, (int(x_normalized), int(y_normalized))))

return normalized_words

# Percorso multipiattaforma del file coordinate_punti.txt
file_path = os.path.join(os.path.dirname(__file__), 'coordinate_punti.txt')

# Carica le parole e le coordinate dal file
words_data = load_words_from_file(file_path)

# Normalizza le coordinate mantenendo le proporzioni
normalized_words_data = normalize_coordinates(words_data)

class WordGameApp:
def __init__(self, root):
self.root = root
self.root.title("Points")

if not normalized_words_data:  # Se la lista di parole è vuota
self.root.quit()
return

self.initialize_game()

# Frame principale
self.frame = tk.Frame(root)
self.frame.pack(pady=10)

# Label per le istruzioni
self.label = tk.Label(self.frame, text="Inserisci i punti che ricordi:")
self.label.pack(pady=10)

# Textbox per l'inserimento della parola
self.word_entry = tk.Entry(self.frame)
self.word_entry.pack(pady=10)
self.word_entry.bind('', self.check_word)  # Tasto Enter per invio parola

# Label per il contatore di parole
self.counter_label = tk.Label(self.frame, text=f"Punti restanti: {self.remaining_words}")
self.counter_label.pack(pady=10)

# Canvas per disegnare forme
self.canvas = Canvas(self.frame, width=600, height=400)
self.canvas.pack(pady=10)

# Pulsante per pulire il canvas e resettare la sessione
self.clear_button = tk.Button(self.frame, text="Pulisci e Reset", command=self.reset_game)
self.clear_button.pack(pady=10)

# Pulsante per mostrare/nascondere tutte le parole
self.toggle_button = tk.Button(self.frame, text="Mostra tutti i punti", command=self.toggle_words)
self.toggle_button.pack(pady=10)

# Frame separato per i pulsanti orizzontali
self.button_frame = tk.Frame(self.frame)
self.button_frame.pack(pady=10)  # Aggiungi il frame
В приведенном выше коде координаты также нормализуются, так что все точки в списке могут отображаться на холсте даже тогда, когда я использую сценарий на своем телефоне.

Подробнее здесь: https://stackoverflow.com/questions/790 ... oordinates
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»