2012-10-30 12 views
9

Matlab, wiem, jak utworzyć linię Segment łączący dwa punkty za pomocą tego kodu:narysować linię za pomocą dwóch punktów

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

Rysuje segment linii prostej od punktu (0,0) do punktu (1,1).

Co próbuję zrobić, to kontynuować linię do krawędzi wykresu. Zamiast rysować linię między tymi dwoma punktami, chcę narysować linię, która obejmuje całą figurę dla dowolnego zestawu dwóch punktów.

Dla tej konkretnej linii i A x = -10: 10, y = -10: 10 Działka mógłbym napisać:

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

Ale muszę to uogólnić dla dowolnego zbioru punktów.

Odpowiedz

6

Co

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 

będąc sym_len połowę oczekiwanej długości wykreślonej linii wokół X?

+0

To rozwiązanie było bardzo podobne do tego, z czego skorzystałem, ponieważ w rzeczywistości zaczynam od wektorów (Y-X) i X. – CodeFusionMobile

10
  1. Rozwiąż równanie linii przechodzi przez te dwa punkty:

    y = a*x + b; 
    

    dla a i b:

    a = (yp(2)-yp(1))/(xp(2)-xp(1)); 
    b = yp(1)-a*xp(1); 
    
  2. Znajdź krawędzie okna wykreślania

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

    lub odciągnij krawędzie daleko, aby nadal można było pomniejszyć, a następnie zresetować limity X/Y.
    lub jeśli nie ma działki w tej chwili, definiują żądane krawędzie:

    xlims = [-10 10]; 
    ylims = [-10 10]; 
    
  3. wypełnić te krawędzie do równania liniowego i wykreślić odpowiednie punkty:

    y = xlims*a+b; 
    line(xlims, y); 
    
  4. i zresetować krawędzie

    xlim(xlims); 
    ylim(ylims); 
    

Jest jeden specjalny przypadek, pionowa linia, którą musisz zająć osobno.

Powiązane problemy