Topic: grafico e distanza euclidea  (Letto 161 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline crynow

  • python unicellularis
  • *
  • Post: 23
  • Punti reputazione: 0
    • Mostra profilo
grafico e distanza euclidea
« il: Novembre 07, 2020, 13:39 »
Prima cosa mi scuso per il topic precedente ma non sapevo come eliminarlo e quindi ho cancellato tutto perchè volevo chiedere un'altra cosa :(

import matplotlib.pyplot as plt
import numpy as np

def grafico(velocità_Aereo_A, velocità_Aereo_B, distanza_Aereo_A, distanza_Aereo_B) :
   
   
   
   
   
   
   
   
def main() :
    velocità_Aereo_A = 640      # km/h
    velocità_Aereo_B = 320      # km/h
    distanza_Aereo_A = 1600     # km
    distanza_Aereo_B = 820      # km
   
   
main()


« Ultima modifica: Novembre 07, 2020, 13:43 da crynow »

Offline crynow

  • python unicellularis
  • *
  • Post: 23
  • Punti reputazione: 0
    • Mostra profilo
Re:grafico e distanza equilatera
« Risposta #1 il: Novembre 07, 2020, 13:41 »
L’aereo A viaggia verso est alla velocità costante di 640 km/h mentre l’aereo B viaggia verso sud alla
velocità costante di 320 km/h. Alle 13:00 Greenwich Mean Time (GMT) gli aerei si trovano nelle
posizioni indicate in figura.

Scrivere una prima funzione Python che rappresenti in un grafico il valore della distanza euclidea D
fra gli aerei in funzione del tempo (diagrammare il valore di D partendo dalle condizioni iniziali
illustrate in figura finché esso non raggiunge il suo valore minimo).

Offline crynow

  • python unicellularis
  • *
  • Post: 23
  • Punti reputazione: 0
    • Mostra profilo
Re:grafico e distanza equilatera
« Risposta #2 il: Novembre 07, 2020, 13:43 »
Non so proprio come scrivere la funzione grafico se qualcuno potrebbe aiutarmi o darmi qualche spunto.
non so come caricare l'immagine

Offline crynow

  • python unicellularis
  • *
  • Post: 23
  • Punti reputazione: 0
    • Mostra profilo
Re:grafico e distanza euclidea
« Risposta #3 il: Novembre 07, 2020, 13:45 »
L'unica cosa che so è che la distanza euclidea si scrive come:

D = sqrt((posizione aereo A)^2 + (posizione aereo B)^2)

posizione aereo A= 1600 km
posizione aereo B = 820 km

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 351
  • Punti reputazione: 0
    • Mostra profilo
Re:grafico e distanza equilatera
« Risposta #4 il: Novembre 08, 2020, 16:28 »
Non so proprio come scrivere la funzione grafico se qualcuno potrebbe aiutarmi o darmi qualche spunto.
non so come caricare l'immagine

bah ... i dati che presenti sono insufficienti a farsi una idea di cosa si voglia in realtà, 1600 Km e 860 km sono insufficienti, se si ragiona in termini di piano cartesiano mancano le posizioni iniziali, siano esse determinate tramite coordinate cartesiane o polari, analogamente avviene se si ragiona in termini di posizione spaziale.

Comunque, supposto di ragionare sul piano cartesiano, ed ignorando particolari quali la superficie "curva" della Terra, la distanza tra due punti viene risolta tramite il teorema di Pitagora, non essendo altro, la distanza, che l'ipotenusa del triangolo rettangolo con cateti pari alla differenza tra ascisse ed ordinate.

Ragionando in tali termini, a livello generale, lo spostamento di un punto nel piano in una unità di tempo è data dalla posizione iniziale sommata alla componente di velocità rispetto agli assi x ed y ... supposta una velocità costante, costruiamo un oggetto di comodo atto a contenere la posizione iniziale ed i componenti di accellerazione :
>>> class Aereo:
    def __init__(self, xo, yo, vxu, vyu):
        self.xo = xo
        self.yo = yo
        self.vxu = vxu
        self.vyu = vyu


ove xo e yo rappresentano le coordinate della posizione iniziale e vxu, vyu le componenti della accellerazione costante lungo ascisse ed ordinate.

supposti due aerei a e b definiti come sopra indicato, potremo calcolare la loro distanza nel piano incrementando le loro coordinate iniziali delle componenti di accellerazione costante lungo gli assi cartesiani di riferimento moltiplicata per il tempo trascorso e, quindi, applicando il teorema di Pitagora
>>> import math
>>> def distance_to_time(a, b, t):
    x_at = a.xo + a.vxu * t
    y_at = a.yo + a.vyu * t
    x_bt = b.xo + b.vxu * t
    y_bt = b.yo + b.vyu * t
    distance = math.sqrt((x_at - x_bt)**2 + (y_at - y_bt)**2)
    return distance

a riprova, siano due "aerei" così stabiliti :
>>> aereo_A = Aereo(0, 0, 640, 0)
>>> aereo_B = Aereo(320, 160, 0, -320)

ove aereo_A è posto all'origine delle coordinate e si sposta verso est (verso positivo) alla velocità di 640 km orari, mentre la posizione di aereo_B (320, 160) e la sua velocità verso sud (negativa) è tale che entro mezz'ora i due aerei si scontreranno, vediamo che dice la nostra funzione, calcolando con intervallo di 10 minuti la distanza nell'ora successiva
>>> for t in range(0, 61, 10):
print('%3d minuti : %.2f' %(t, distance_to_time(aereo_A,
aereo_B,
t/60)))


  0 minuti : 357.77
 10 minuti : 238.51
 20 minuti : 119.26
 30 minuti : 0.00
 40 minuti : 119.26
 50 minuti : 238.51
 60 minuti : 357.77
>>> import matplotlib.pyplot as plt

Si sono "attraversati" esattamente a 30 minuti ... poi si sono allontanati i loro fantasmi, comunque vediamo che siamo in presenza di una variazione di distanza  lineare nel tempo.
Notare che gli intervalli di tempo vengono passati in sessantesimi, essendo minuti.

Il tema proposto richiede il plottaggio dall'inizio alla "distanza minima" definito in una funzione, pertanto, dovremmo memorizzare i tempi e le distanze corrispondenti, trovare la minima distanza e quindi plottare sin lli dall'inizio, le liste e la funzione builtin "min()" possono esservi di aiuto, prova questo :
>>> def plot_of_minimum_distance(a, b):
    minutes = [i for i in range(0, 61, 10)]
    distances = []
    for t in minutes:
        distance = distance_to_time(a, b, t/60)
        distances.append(distance)
    min_distance = min(distances)
    index_m_d = distances.index(min_distance)
    plt.plot(minutes[:index_m_d+1], distances[:index_m_d+1])
    plt.show()

   
>>> plot_of_minimum_distance(aereo_A, aereo_B)


... Ora, Ti ho fornito un "ragionamento" su di una situazione proprio base che potrebbe essere conforme, o meno, a quanto devi fare, sia conforme o meno è poco significativo, devi "comprenderlo" come metodo di approccio e, se occorre, vedere il funzionamento di ciò che è stato utilizzato ... devi evitare di farti "paralizzare" dalla confusione, matematica (ed informatica) sono matrerie "ragionevoli", nel senso che bisogna ragionarci su ... sulla base di dati e finalità precise, fai di meglio nel prossimo post.
;)

Ciao