fork download
  1. /* packimport tkinter as tk
  2. import math
  3.  
  4. class BrujulaApp:
  5.   def __init__(self, root):
  6.   self.root = root
  7.   self.root.title("Brújula Digital")
  8.   self.root.geometry("400x450")
  9.   self.root.configure(bg="#1e1e1e")
  10.  
  11.   # Grados iniciales (0 = Norte)
  12.   self.grados = 0
  13.  
  14.   # Crear título
  15.   self.label_titulo = tk.Label(root, text="BRÚJULA", font=("Arial", 16, "bold"), fg="white", bg="#1e1e1e")
  16.   self.label_titulo.pack(pady=10)
  17.  
  18.   # Crear área de dibujo (Canvas)
  19.   self.canvas = tk.Canvas(root, width=300, height=300, bg="#1e1e1e", highlightthickness=0)
  20.   self.canvas.pack()
  21.  
  22.   # Control deslizable para simular el movimiento físico de la brújula
  23.   self.scale = tk.Scale(root, from_=0, to=360, orient="horizontal", command=self.actualizar_rumbo,
  24.   bg="#1e1e1e", fg="white", highlightthickness=0, troughcolor="#333333")
  25.   self.scale.pack(fill="x", padx=40, pady=10)
  26.  
  27.   # Etiqueta de texto para los puntos cardinales
  28.   self.label_info = tk.Label(root, text="0° N", font=("Arial", 14), fg="#00ffcc", bg="#1e1e1e")
  29.   self.label_info.pack()
  30.  
  31.   # Dibujar por primera vez
  32.   self.dibujar_brujula()
  33.  
  34.   def obtener_punto_cardinal(self, grados):
  35.   if 337.5 <= grados or grados < 22.5: return "N"
  36.   if 22.5 <= grados < 67.5: return "NE"
  37.   if 67.5 <= grados < 112.5: return "E"
  38.   if 112.5 <= grados < 157.5: return "SE"
  39.   if 157.5 <= grados < 202.5: return "S"
  40.   if 202.5 <= grados < 247.5: return "SO"
  41.   if 247.5 <= grados < 292.5: return "O"
  42.   return "NO"
  43.  
  44.   def actualizar_rumbo(self, valor):
  45.   self.grados = int(valor)
  46.   rumbo = self.obtener_punto_cardinal(self.grados)
  47.   self.label_info.config(text=f"{self.grados}° {rumbo}")
  48.   self.dibujar_brujula()
  49.  
  50.   def dibujar_brujula(self):
  51.   self.canvas.delete("all")
  52.   cx, cy, r = 150, 150, 120
  53.  
  54.   # Dibujar el anillo exterior
  55.   self.canvas.create_oval(cx-r, cy-r, cx+r, cy+r, outline="white", width=3)
  56.  
  57.   # Marcas de texto fijas de los puntos cardinales principales
  58.   self.canvas.create_text(cx, cy-r+15, text="N", fill="red", font=("Arial", 12, "bold"))
  59.   self.canvas.create_text(cx, cy+r-15, text="S", fill="white", font=("Arial", 12, "bold"))
  60.   self.canvas.create_text(cx+r-15, cy, text="E", fill="white", font=("Arial", 12, "bold"))
  61.   self.canvas.create_text(cx-r+15, cy, text="O", fill="white", font=("Arial", 12, "bold"))
  62.  
  63.   # Calcular el ángulo de la aguja en radianes
  64.   # Se resta 90 grados debido a que el sistema de coordenadas de la pantalla empieza en el eje X (Este)
  65.   angulo_rad = math.radians(self.grados - 90)
  66.  
  67.   # Coordenadas de la punta de la aguja (Norte Magnético)
  68.   nx = cx + (r - 30) * math.cos(angulo_rad)
  69.   ny = cy + (r - 30) * math.sin(angulo_rad)
  70.  
  71.   # Coordenadas de la parte trasera de la aguja (Sur)
  72.   sx = cx - (r - 30) * math.cos(angulo_rad)
  73.   sy = cy - (r - 30) * math.sin(angulo_rad)
  74.  
  75.   # Dibujar la aguja (Línea roja para el Norte, blanca para el Sur)
  76.   self.canvas.create_line(cx, cy, nx, ny, fill="red", width=4, arrow="last")
  77.   self.canvas.create_line(cx, cy, sx, sy, fill="white", width=4)
  78.  
  79.   # Centro de la aguja
  80.   self.canvas.create_oval(cx-5, cy-5, cx+5, cy+5, fill="gray")
  81.  
  82. # Inicializar aplicación
  83. if __name__ == "__main__":
  84.   root = tk.Tk()
  85.   app = BrujulaApp(root)
  86.   root.mainloop()
  87.  
  88.  
  89.   age whatever; // don't place package name! */
  90.  
  91. import java.util.*;
  92. import java.lang.*;
  93. import java.io.*;
  94.  
  95. /* Name of the class has to be "Main" only if the class is public. */
  96. class Ideone
  97. {
  98. public static void main (String[] args) throws java.lang.Exception
  99. {
  100. // your code goes here
  101. }
  102. }
Success #stdin #stdout 0.07s 54588KB
stdin
Standard input is empty
stdout
Standard output is empty