Check if a set of coordinates are on a line

조회 수: 11 (최근 30일)
Sebastian Ursarescu
Sebastian Ursarescu 2019년 9월 18일
댓글: Sebastian Ursarescu 2019년 9월 18일
I have a set of coordinates, for example x = [0 0 0 0] y = [1 0.9 1.1 1] or x = [1 2 3 4] y = [1 4 6 7], and I want to know if they are almost on a line. I can say the first exemple does and the second doesn't.
I tried with polyarea checking if the area is small enough but it's hard to define the crossing area value regarding the size of the polygon and, moreover, it gives the wrong answer if the polygon crosses itself, like in the first example.
Thank you in advice.
  댓글 수: 1
KALYAN ACHARJYA
KALYAN ACHARJYA 2019년 9월 18일
@Guillaume sir, sorry, I missed it, I misundestood the question and considering on image (Horizantal or Vertical line)
Always Thanks

댓글을 달려면 로그인하십시오.

채택된 답변

Bruno Luong
Bruno Luong 2019년 9월 18일
편집: Bruno Luong 2019년 9월 18일
xy=[x(:)';y(:)'];
criteriatol = 0.01; % adjust to your need, smaller means stricter line test
s = svd(xy-mean(xy,2));
isline = max(s)*criteriatol>min(s)
Work isotropically (orientation independent, but also scaling, shifting independent), even with vertical line.

추가 답변 (1개)

Guillaume
Guillaume 2019년 9월 18일
Probably, the best way is to use polyfit (which does a least square fit) and look at the norm of the residuals. If it's small enough your points (tolerance is up to you) are on a line.
[~, pfit] = polyfit(x, y, 1); %least square fit of a line
if pfit.normr <= arbitrary_value
disp('is a line');
else
disp('not a line');
end
You may need to special case when all the x are (almost) all equal (vertical line) if that's an actual possibility.
  댓글 수: 2
Sebastian Ursarescu
Sebastian Ursarescu 2019년 9월 18일
The problem is actually when I have a vertical line. I already tried using functions but they don't cover the case of vertical line
Guillaume
Guillaume 2019년 9월 18일
Then use Bruno's answer which is a lot better than mine anyway.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Computational Geometry에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by