Retta per due punti matlab

di il
1 risposte

Retta per due punti matlab

Salve a tutti,

sto cercando una funzione di matlab che mi permetta di trovare la retta che passa per due punti di cui conosciamo le coordinate. Mi serve visualizzare la retta per intero non solo il segmento(ho provato line e interp1) tra i due punti. Ho bisogno di trovare l'equazione della retta in modo tale da poter utilizzare la funzione intersect per trovare il punto d'intersezione con un' altra retta.

Spero possiate aiutarmi grazie.

1 Risposte

  • Re: Retta per due punti matlab

    Una funzione per determinare una retta che passi per due punti potrebbe essere:
    
    function [m, k]=retta2punti(A,B)
    % [m, k]=retta2punti(A,B)
    % Calcola i valori dei parametri "m" e "k" della retta passante per i punti
    % A(x0,y0), B(x1,y1)
    % ==> y=mx+k
    %
    % ATTENZIONE: BISOGNA INSERIRE OPPORTUNI CONTROLLI SULLA VALIDITA DEGLI
    %             INPUT
    %
    x0=A(1);
    x1=B(1);
    y0=A(2);
    y1=B(2);
    
    m=(y1-y0)/(x1-x0);
    k=-m*x0+y0;
    
    Per calcolare il punto di intersezione di due rette si possono generare le due rette invocando due volte la funzione retta2punti e poi invocare la funzione:
    
    function [X, Y]=inters2rette(m1,k1,m2,k2)
    % [X, Y]=inters2retta(m1,k1,m2,k2)
    % Calcola le coordinate del puntio di intersezione di due rette definite
    % come:
    %   retta 1 ==> y=m1*x+k1
    %   retta 2 ==> y=m2*x+k2
    %
    % se le rette non hanno un punto di intersezione ==> X=NaN, Y=NaN
    %
    %
    % ATTENZIONE: BISOGNA INSERIRE OPPORTUNI CONTROLLI SULLA VALIDITA DEGLI
    %             INPUNT
    %
    X=NaN;
    Y=NaN;
    D=(-m1+m2);
    if(D ~= 0)
       X=(k1-k2)/D;
       Y=(-m1*k2+m2*k1)/D;
    end
    
    A titolo di prova:
    
    A=[1,3];
    B=[5,9];
    C=[3,1];
    D=[9,5];
    % Oppure, più in generale
    A=rand(1,2)*3;
    B=rand(1,2)*5;
    C=rand(1,2)*6;
    D=rand(1,2)*7;
    
    [m1,k1]=retta2punti(A,B);
    [m2,k2]=retta2punti(C,D);
    [X,Y]=inters2rette(m1,k1,m2,k2);
    
    min_x=min([A(1) B(1) C(1) D(1) X])
    max_x=max([A(1) B(1) C(1) D(1) X])
    x=floor(min_x-3):ceil(max_x+3)
    y1=m1*x+k1;
    y2=m2*x+k2;
    
    figure
    plot(x,y1,'r')
    hold on
    plot(x,y2,'b')
    plot([A(1) B(1)],[A(2) B(2)],'o')
    plot([C(1) D(1)],[C(2) D(2)],'d')
    plot(X,Y,'x')
    grid on
    
    
    Hope this helps
Devi accedere o registrarti per scrivere nel forum
1 risposte