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