testing collinearity with algorithm collinear7
10 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi,
I was looking for an algorithm to test collinearity and found : http://blogs.mathworks.com/loren/2008/06/06/collinearity/
function tf = collinear7(p1,p2,p3)
mat = [p1(1)-p3(1) p1(2)-p3(2); ...
p2(1)-p3(1) p2(2)-p3(2)];
tf = det(mat) == 0;
works fine if you test it with eg: p1 = [1 1]; p2 = [3.5 3.5]; p3 = [-7.2 -7.2]; collinear(p1,p2,p3) ans=1
for testing I choose: p1 = [ 123.83 -205.59] p2 = [ 138.38 -990.38] p3=(p1+p2)/2 p3 = 131.11 -597.98
collinear(p1,p2,p3) ans = 0 here I was suprised because two points and the middle point should be collinear no? so I tried it again with p1=[1.5 -5.3] p2=[ 5 -3.8] p3=(p1+p2)/2 collinear(p1,p2,p3) ans = 1 so now it is ok again???
so I tested another approach slightky changed the code from the site
function tf = collinear1(p1,p2,p3)
m = slope(p1,p2);
b = intercept(p1,p2);
y = (m*p3(1)+b) ;
tf=abs(y- p3(2))<0.000001;
end
function m = slope(p1,p2)
m = (p2(2)-p1(2))/(p2(1)-p1(1));
end
function b = intercept(p1,p2)
m = slope(p1,p2);
b = p1(2)-m*p1(1);
end
with p1 = [ 123.83 -205.59] p2 = [ 138.38 -990.38] p3=(p1+p2)/2
collinear1(p1,p2,p3) is 1=> so collinear?
I can only think of numerical errors to explain this or am I doing something completely wrong?
regards,J
0 Kommentare
Akzeptierte Antwort
Matt J
am 8 Dez. 2012
Bearbeitet: Matt J
am 12 Dez. 2012
Yes, it's a numerical problem. The first version collinear7 uses the criterion
det(mat) == 0
which demands both perfect collinearity among the points and a perfect determinant calculation, with no tolerance for floating point errors. The other versions apply a tolerance on floating point inaccuracies.
0 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Testing Frameworks finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!