Descrizione.
In questo articolo presentiamo un algoritmo di analisi del movimento che può essere utilizzato per identificare comportamenti anomali, che potrebbero indicare la presenza di un oggetto non identificato (ufo). L'algoritmo utilizza varie librerie per analizzare il movimento degli oggetti avvistati, che possono avere una traettoria spezzata tra diversi punti. L'algoritmo è implementato nel linguaggio di programmazione Gambas (per le sue possibili utilità per l'ufologia e per l'Ansu è già stato presentato pubblicamente), e si basa sui seguenti passaggi:
1) inizializzare l'algoritmo.
2) Avviare un pannello di controllo.
3) Avviare un grafico del movimento.
4) Aggiungere i punti di posizione degli ufo nel grafico.
5) Calcolare la velocità e l'accelerazione tra i punti.
6) Analizzare il movimento nei punti.
Ecco il codice sorgente per Gambas (è volutamente incompleto per non avvantaggiare i furbi che lo userebbero senza nemmeno ringraziare).
# Associazione Nazionale Studi Ufo , A.N.S.U.
# Importa le librerie necessarie
import gambas.gui.forms as gf
import gambas.core.graphics as gr
import gambas.core.math as mt
# Definisci le costanti
MAX_POINTS = 100
# Definisci la classe dell'algoritmo
class AlgoritmoMovimento(gf.Form):
# Inizializza l'algoritmo
def __init__(self):
super().__init__()
# Crea le variabili necessarie
self.punti = []
self.velocità = []
self.accelerazione = []
# Crea il pannello di controllo
self.pannello_controllo = gf.Panel()
self.pannello_controllo.SetBounds(0, 0, 300, 200)
self.Add(self.pannello_controllo)
# Crea il grafico del movimento
self.grafico_movimento = gr.Graph()
self.grafico_movimento.SetBounds(0, 200, 300, 200)
self.pannello_controllo.Add(self.grafico_movimento)
# Aggiungi un punto al grafico
def AggiungiPunto(self, x, y):
self.punti.append((x, y))
self.grafico_movimento.AddPoint((x, y))
# Calcola la velocità e l'accelerazione del punto
def CalcolaVelocitàAccelerazione(self, punto_precedente, punto_corrente):
if punto_precedente is None:
return (0, 0)
x_diff = punto_corrente[0] - punto_precedente[0]
y_diff = punto_corrente[1] - punto_precedente[1]
velocità = (x_diff, y_diff)
accelerazione = (velocità[0] - punto_precedente[2], velocità[1] - punto_precedente[3])
return velocità, accelerazione
# Analizza il movimento
def AnalizzaMovimento(self):
for i in range(len(self.punti) - 1):
punto_precedente = self.punti[i]
punto_corrente = self.punti[i + 1]
velocità, accelerazione = self.CalcolaVelocitàAccelerazione(punto_precedente, punto_corrente)
# Controlla se il movimento è anomalo
if velocità[0] > 10000:
print("Movimento anomalo: velocità X troppo elevata")
if velocità[1] > 10000:
print("Movimento anomalo: velocità Y troppo elevata")
if accelerazione[0] > 10000:
print("Movimento anomalo: accelerazione X troppo elevata")
if accelerazione[1] > 10000:
print("Movimento anomalo: accelerazione Y troppo elevata")
# Esegue l'algoritmo
def Esegui(self):
self.AggiungiPunto(0, 0)
for i in range(MAX_POINTS):
self.AggiungiPunto(i, i * i)
self.AnalizzaMovimento()
# Crea un'istanza dell'algoritmo
algoritmo = AlgoritmoMovimento()
algoritmo.Show()
Istruzioni per l'uso.
L'algoritmo può essere utilizzato per analizzare il movimento di oggetti avvistati in immagini o video. Per farlo, è necessario prima aggiungere i punti di posizione degli oggetti al grafico. L'algoritmo analizzerà quindi il movimento dei punti e identificherà eventuali comportamenti anomali. Per aggiungere un punto al grafico, è necessario chiamare il metodo AggiungiPunto() dell'algoritmo.
Articolo del Webmaster dell'Ansu.