2012-10-30 2 views
9

con MATLAB, so come creare una linea segmento che collega due punti utilizzando questo codice:Tracciare una linea per due punti

line([0 1],[0 1]) 

Questo disegna un segmento di linea retta dal punto (0,0) al punto (1,1).

Quello che sto cercando di fare è continuare quella linea fino al limite della trama. Invece di tracciare una linea tra questi due punti, desidero disegnare una linea tramite quei due punti che coprono l'intera figura per qualsiasi serie di due punti.

Per questa particolare linea e un x = -10: 10, y = -10: 10 trama potrei scrivere:

line([-10 10], [-10 10]); 

Ma avrei bisogno di generalizzare questo per ogni insieme di punti.

risposta

6

Che dire

function = long_line(X,Y,sym_len) 
     dir = (Y-X)/norm(Y-X); 
     Yp = X + dir*sym_len; 
     Xp = X - dir*sym_len; 
     line(Xp,Yp); 
    end 

essere sym_len metà della durata prevista della linea tracciata intorno X?

+0

Questa soluzione era molto simile a quello che ho finito usando sin da quando in effetti inizio con i vettori (Y-X) e X. – CodeFusionMobile

10
  1. risolvere l'equazione linea di passare attraverso questi due punti:

    y = a*x + b; 
    

    per a e b:

    a = (yp(2)-yp(1))/(xp(2)-xp(1)); 
    b = yp(1)-a*xp(1); 
    
  2. Trova i bordi della finestra tracciando

    xlims = xlim(gca); 
    ylims = ylim(gca); 
    

    o prendi i bordi molto lontano, in modo da poter continuare a zumare, in seguito ripristinare i limiti x/y.
    o se non c'è una trama al momento, definire il vostro bordi desiderati:

    xlims = [-10 10]; 
    ylims = [-10 10]; 
    
  3. Fill in quei bordi nell'equazione di linea e tracciare i punti corrispondenti:

    y = xlims*a+b; 
    line(xlims, y); 
    
  4. e azzerare il bordi

    xlim(xlims); 
    ylim(ylims); 
    

C'è un caso speciale, la linea verticale, che dovrai gestire separatamente.