Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: Distanza tra due punti

  1. #1
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657

    Distanza tra due punti

    Ciao a tutti...
    ho da porvi una questione abbastanza complessa, quindi cerchero di esprimermi nel modo migliore possibile: ho due punti di coordinate P(xi,yi) e Q(xf,yf). La loro distanza si calcola facendo:
    d = sqrt( (xf-xi)^2 + (yf-yi)^2 )
    Sapendo che questa distanza d si percorre in 3 ore, come faccio a calcolare la distanza percorsa in 5 minuti e le nuove coordinate di P, in modo da poterlo traslare?

    Vorrei fare in modo che P si avvicini a Q in modo da sovrapporsi.

    Grazie e ciao

  2. #2
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    codice:
    //---------------------
    $x1=5;
    $y1=5;
    $x2=20;
    $y2=20;
    $t=3*60; //minuti
    $tm=5; //minuti
    //---------------------
    $m=($y2-$y1)/($x2-$x1);
    $q=$y1-$m*$x1;
    $d=sqrt(pow(($x2-$x1),2)+pow(($y2-$y1),2)); //distanza fra i 2 punti
    $dm=$tm*$d/$t;
    $xm=$dm*cos(atan($m))+$x1;
    $ym=$dm*sin(atan($m))+$y1;
    echo "Xm: $xm
    Ym: $ym";


    think simple think ringo

  3. #3
    Utente di HTML.it L'avatar di Avalox
    Registrato dal
    Nov 2003
    Messaggi
    302
    $m=($y2-$y1)/($x2-$x1);
    e se x1 e x2 sono uguali, cosa succede? divido per 0? :master:

  4. #4
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    Grazie del codice, ma vorrei capirlo:
    Codice PHP:
    //---------------------
    $x1=5;
    $y1=5;
    $x2=20;
    $y2=20;
    $t=3*60//minuti
    $tm=5//minuti
    //---------------------
    $m=($y2-$y1)/($x2-$x1); //coefficente angolare
    $q=$y1-$m*$x1;          //Equazione della retta se non sbaglio
    $d=sqrt(pow(($x2-$x1),2)+pow(($y2-$y1),2)); //distanza fra i 2 punti
    $dm=$tm*$d/$t//boh
    $xm=$dm*cos(atan($m))+$x1//boh
    $ym=$dm*sin(atan($m))+$y1;//boh
    echo "Xm: $xm
    Ym: 
    $ym"
    Puoi spiegarmi tutti boh?
    E perché ti servono due versioni del tempo (in sec e min)

  5. #5
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    [supersaibal]Originariamente inviato da Avalox
    e se x1 e x2 sono uguali, cosa succede? divido per 0? :master: [/supersaibal]
    bisogna impostare il problema in modo leggermente diverso, ovvero tutto si semplifica...


    codice:
    //---------------------
    $x1=5;
    $y1=5;
    $x2=20;
    $y2=20;
    $t=3*60; //minuti
    $tm=5; //minuti
    //---------------------
    $m=($y2-$y1)/($x2-$x1); //coefficente angolare della retta
    $q=$y1-$m*$x1;   //intercetta della retta
    $d=sqrt(pow(($x2-$x1),2)+pow(($y2-$y1),2)); //distanza fra i 2 punti
    $dm=$tm*$d/$t; //nuova distanza dopo il tempo $tm
    $xm=$dm*cos(atan($m))+$x1;
    $ym=$dm*sin(atan($m))+$y1;
    echo "Xm: $xm
    Ym: $ym";

    il tempo deve essere nella stessa unità di misura, ovvero se minuti tutto minuti, se ore tutto ore.

    il coefficiente angolare della retta rappresenta il valore della tangente dell'angolo della stessa con l'asse delle ascisse; per trovare il valore dell'angolo devi usare la funzione atan().
    dopo aver trovato l'angolo, conoscendo l'ipotenusa del triangolo rettangolo ($dm), tramite le funzioni seno e coseno possiamo trovare i valori dei cateti, e quindi le nuove coordinate del punto.

    think simple think ringo

  6. #6
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    [supersaibal]Originariamente inviato da marketto
    bisogna impostare il problema in modo leggermente diverso, ovvero tutto si semplifica...


    codice:
    //---------------------
    $x1=5;
    $y1=5;
    $x2=20;
    $y2=20;
    $t=3*60; //minuti
    $tm=5; //minuti
    //---------------------
    $m=($y2-$y1)/($x2-$x1); //coefficente angolare della retta
    $q=$y1-$m*$x1;   //intercetta della retta
    $d=sqrt(pow(($x2-$x1),2)+pow(($y2-$y1),2)); //distanza fra i 2 punti
    $dm=$tm*$d/$t; //nuova distanza dopo il tempo $tm
    $xm=$dm*cos(atan($m))+$x1;
    $ym=$dm*sin(atan($m))+$y1;
    echo "Xm: $xm
    Ym: $ym";

    il tempo deve essere nella stessa unità di misura, ovvero se minuti tutto minuti, se ore tutto ore.

    il coefficiente angolare della retta rappresenta il valore della tangente dell'angolo della stessa con l'asse delle ascisse; per trovare il valore dell'angolo devi usare la funzione atan().
    dopo aver trovato l'angolo, conoscendo l'ipotenusa del triangolo rettangolo ($dm), tramite le funzioni seno e coseno possiamo trovare i valori dei cateti, e quindi le nuove coordinate del punto.

    [/supersaibal]
    Spiegazione alquanto intrigante...se ho il tempo in secondi devo modificare $dm=$tm*$d/$t; //nuova distanza dopo il tempo $tm in $dm=$t*$d/$t; //nuova distanza dopo il tempo $tm

    la vado a provare immediatamente, ma prima devo andare a cenare...ti faccio sapere tra 30/60 minuti

  7. #7
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    [supersaibal]Originariamente inviato da FinalFantasy
    la vado a provare immediatamente, ma prima devo andare a cenare...ti faccio sapere tra 30/60 minuti [/supersaibal]






    think simple think ringo

  8. #8
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    Codice PHP:
          $tp time() - $table['ora_partenza'];
          
    $tpm *=60;
          
    $m=($yf-$yi)/($xf-$xi); //coefficente angolare della retta
          
    $q=$yi-$m*$xi;   //intercetta della retta
          
    $d=sqrt(pow(($xf-$xi),2)+pow(($yf-$yi),2)); //distanza fra i 2 punti
          
    $dm=$tpm*$d/$tp//nuova distanza dopo il tempo $tm
          
    $new_xi=$dm*cos(atan($m))+$xi;
          
    $new_yi=$dm*sin(atan($m))+$yi;

          
    $newcoo $new_xi .","$new_yi
    lo ho riadattato in base alle mie esigenze, ma non mi fa nessuna variazione, praticamente i nuovi punti coincidono con il primo punto

  9. #9
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    [supersaibal]Originariamente inviato da FinalFantasy
    Codice PHP:
          $tp time() - $table['ora_partenza'];
          
    $tpm *=60;
          
    $m=($yf-$yi)/($xf-$xi); //coefficente angolare della retta
          
    $q=$yi-$m*$xi;   //intercetta della retta
          
    $d=sqrt(pow(($xf-$xi),2)+pow(($yf-$yi),2)); //distanza fra i 2 punti
          
    $dm=$tpm*$d/$tp//nuova distanza dopo il tempo $tm
          
    $new_xi=$dm*cos(atan($m))+$xi;
          
    $new_yi=$dm*sin(atan($m))+$yi;

          
    $newcoo $new_xi .","$new_yi
    [/supersaibal]
    lo ho riadattato in base alle mie esigenze, ma non mi fa nessuna variazione, praticamente i nuovi punti coincidono con il primo punto. Non ho capito la necessita di calcolare l'intercetta in quanto non ne fai uso (almeno io non me ne accorgo)

  10. #10
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    effettivamente l'intercetta nn veniva usata...prova a guardare se così ti piace di più:
    codice:
    class coordinate {
    
    	var $tempo = "";
    	
    	function coordinate($x1,$y1,$x2,$y2){
    		$this->x1=$x1;
    		$this->x2=$x2;
    		$this->y1=$y1;
    		$this->y2=$y2;
    		$this->m=($this->y2-$this->y1)/($this->x2-$this->x1);
    		$this->d=sqrt(pow(($this->x2-$this->x1),2)+pow(($this->y2-$this->y1),2));
    	}
    
    	function parziali($tm){
    		$dm=$tm*$this->d/$this->tempo;
    		$xm=$dm*cos(atan($this->m))+$this->x1;
    		$ym=$dm*sin(atan($this->m))+$this->y1;
    		return array($xm,$ym);
    	}
    
    }
    $coordinate=new coordinate(5,5,20,20);
    $coordinate->tempo=180;
    for ($i=0;$i<180;$i=$i+10){
    	list($xm,$ym) = $coordinate->parziali($i);
    	echo "Xm $xm - Ym $ym
    ";
    }

    think simple think ringo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.