Punto che si muove nel piano xy con velocità v

di il
6 risposte

Punto che si muove nel piano xy con velocità v

Buongiorno a tutti,

sono alle prime armi con matlab ed avrei bisogno di aiuto.

dovrei plottare nel piano xy un punto che si muove con una velocità da me impostata.

mi date una mano?

grazie

6 Risposte

  • Re: Punto che si muove nel piano xy con velocità v

    La domanda è troppo vaga:

    [*] hai fatto almeno un tentativo per scrivere il codice?
    [*] di quale aiuto specifico hai bisogno?
    [*] hai le coordinate (X,y)) dei punti della traiettoria che vuoi plottare?
    [*] devi calcolare i punti della traiettoria? Se sì:
    [*] quali sono le coordinate iniziali?
    [*] come è definita la velocità: modulo e direzione? Hai le componenti lungo X e Y?
    [*] la velocità è costante?
  • Re: Punto che si muove nel piano xy con velocità v

    Un implementato uno codice (da mettere a posto) come prova, ma non è quello che volevo come risultato finale.

    ho fatto una interpolazione con incremento del punto di 0.5 ma non so come inserire la velocità costante che desidero.
    inoltre non ho trovato la funzione per l'interpolazione lineare.

    il codice è il seguente:
    xt= 0;
    yt= 0;
    hold on;
    grid on;
    %traiettoria
    x = [-10 7];
    y = [-5 5];
    xq = x(1):0.5:x(end);
    yq = spline(x,[0 y 0],xq); %cubica interpolata

    p1 = [-5 -3];
    p2 = [0 0] ;
    plot([ p1(1) p2(1)], [p1(2) p2(2)]);
    p3 = [-5/2 -1];
    p2 = [0 0] ;
    plot([ p3(1) p2(1)], [p3(2) p2(2)]);

    p4 = [3 15/4];
    p2 = [0 0] ;
    plot([ p4(1) p2(1)], [p4(2) p2(2)]);


    plot(xq,yq,':.b',x,y,'or',xt,yt);


    bisogna sistemarlo
  • Re: Punto che si muove nel piano xy con velocità v

    Mi sembra di capire che il problema non sia tanto l'implementazione in MatLab quanto piuttosto la "fisica" che sta dietro al fenomeno.

    Non puoi definire il moto di un "oggetto" semplicemente dividendo lo spazio tra il punto iniziale e quello finale in "tot" punti; come definisci il tempo trascorso nello spostamento tra un punto e l'altro?

    Tra l'altro, nel codice non hai definito la velocità; inoltre, a prescindere dal modo nel quale calcoli i punti, se li plotti tutti assieme non riesci a visualizzare "il movimento".

    Dovresti come minimo, inserire le istruzioni di plottaggio all'interno di un ciclo for ed inserire, nello stesso, una chiamata alla funzione "pause" per "rallentare" il plolttaggio e dare l'illusione del movimento.

    Per quanto riguarda il calcolo dei punti, dovresti dare un'occhiata alle equazioni del moto.
    Riguardo a questo, non hai risposto alle mie domande:
    [*] come è definita la velocità: modulo e direzione? Hai le componenti lungo X e Y?
    [*] la velocità è costante?

    In base alle risposte a queste domande dovresti facilmente impostare il calcolo della traiettoria (s=v*t); tralasciando per il momento le funzionalità di indexing di MatLab (che in molti casi consentono di evitare i usare dei cicli for) potresti (tanto per fare pratica) creare un ciclo for nel quale, ad ogni iterazione calcoli la posizione al tempo "t".
  • Re: Punto che si muove nel piano xy con velocità v

    Il mio problema è come iniziare.

    vorrei implementare una traccia a velocità costante e sapere dopo un certo tempo t in che posizione si trova.
    il problema è che sono bloccato in partenza perché non so come impostare il tutto
  • Re: Punto che si muove nel piano xy con velocità v

    Come anticipato nella risposta precedente, devi definire:

    [*] coordinate iniziali X e Y
    [*] modulo e direzione (angolo) della velocità. In qusto modo, un punto che si muova parallalelamente all'asse X o all'asse Y saranno i casi particolari dell'angolo (direzione) uguali, rispettivamente a 0° e 90°
    [*] durata della simulazione

    Quindi
    [*] scomporre la velocità nelle componenti X e Y
    [*] calcolate le coordinate del punto finale della traiettoria come
    
    x_fin=x_ini+vx*t
    y_fin=y_ini+vy*t
    
    dove vx e vy soo le componenti della velocità lungo X e Y

    Per il plottaggio, puoi:
    [*] definire il passo temporale (ad esempio 0.1 secondi)
    [*] trovare il numero di campioni come "tempo della simulazione / passo temporale"
    [*] creare due vettori (X e Y) campionando la distanza percorsa su x e y in base al risultato del punto precedente
    [*] inserire le istruzioni per il plottaggio all'interno di un ciclo for inserendo una chiamata alla funzione "pause" con parametro uguale al "passo temporale" per ottenere l'effetto movimento
    
    
    % Definizione della coordinata X inziale
    x_ini=10
    % Definizione della coordinata Y inziale
    y_ini=3
    % Definizione della durata della simulazione
    t=10
    % Definizione del modulo della velocità
    v=33
    % Definizione della direzione della velocità
    v_dir=33
    % Scomposizione della velocità nelle componenti X e Y
    vx=v*cosd(v_dir)
    vy=v*sind(v_dir)
    % Calcolo delle coordinate finale
    x_fin=x_ini+vx*t
    y_fin=y_ini+vy*t
    
    % Sezione per il plottagio
    % Scelta tipo plottaggio: 0 => punto
    %                         1 => linea continua
    p_mode=0
    % Definizione dell'intervallo di tempo
    dt=0.1
    % Calcolo del numero dei punti
    np=t/dt
    % Definizione dei vettori X e Y
    x_pt=linspace(x_ini,x_fin,np)
    y_pt=linspace(y_ini,y_fin,np)
    % Apertura della "figure"
    figure
    % Creazine degli assi cartesiani
    axes
    % Plottaggio del punto iniziale e finale della traiettoria
    plot(x_pt(1),y_pt(1),'d','markerfacecolor','k','markeredgecolor','k')
    grid minor
    hold on
    plot(x_pt(end),y_pt(end),'d','markerfacecolor','k','markeredgecolor','k')
    % Loop per il plottaggio della traiettoria come "linea" con "effetto movimento"
    
    if(p_mode == 0)
       for i=1:np
          ph=plot(x_pt(i),y_pt(i),'d','markerfacecolor','r','markeredgecolor','r');
          xlim([x_ini*.1 x_fin*1.1])
          ylim([y_ini*.1 y_fin*1.1])
          daspect([1 1 1])
          pause(dt)
          delete(ph)
       end
    else
       for i=1:np-1
          plot([x_pt(i) x_pt(i+1)],[y_pt(i) y_pt(i+1)],'r','linewidth',2)
          xlim([x_ini*.1 x_fin*1.1])
          ylim([y_ini*.1 y_fin*1.1])
          daspect([1 1 1])
          pause(dt)
       end
    end
    
  • Re: Punto che si muove nel piano xy con velocità v

    Grazie mille per l'aiuto
Devi accedere o registrarti per scrivere nel forum
6 risposte