Whether a point lies within a rectangle (Fast solution)

조회 수: 52 (최근 30일)
vivek
vivek 2014년 10월 22일
댓글: Star Strider 2020년 6월 20일
I have a large list of points and a large list of rectangles.I want to find the number of points inside each rectangle.I have a working solution which is very TPT heavy.
Is there a faster way of implementing this.
What I am doing now : Assume point P’s coordinate is (xp,yp), and the rectangle’s lower left point is (x1,y1) and upper right point is (x2,y2):if (xp is between x1 and x2) AND (yp is between y1 and y2) then the point(xp,yp) is inside the rectangle.The issue is i have a large set of points (> 20000) and a larger set of rectangles(lets say also > 2000)
Now i can loop over each rectangle to caluclate the the number of points in each
for ii=1:20000
ind = Xcord>Rects(ii,1) & Xcord<Rects(ii,3) & Ycord>Rects(ii,2) & Ycord<Rects(ii,4);
count = sum(ind);
end
  댓글 수: 2
Guillaume
Guillaume 2014년 10월 22일
Do the rectangles overlap?
Are the coordinates integer or floating point?
vivek
vivek 2014년 10월 22일
The rectangles can overlap and the coordinates are floating point.

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

답변 (4개)

Star Strider
Star Strider 2014년 10월 22일
편집: Adam Danz 2020년 6월 20일
The inpolygon (and possibly rectint depending on what you want to do) functions will likely make your task easier, although they would not eliminate the loops over the rectangles.
  댓글 수: 3
Adam Danz
Adam Danz 2020년 6월 20일
편집: Adam Danz 2020년 6월 20일
* Just FYI, I edited Star Strider's answer to update the links to the two functions. They were from r2014a documentation which no longer exists.
+1
Star Strider
Star Strider 2020년 6월 20일
Adam — Thank you!

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


Guillaume
Guillaume 2014년 10월 22일
I don't think you'll find a faster way to do it in matlab, short of performing the search in a mex file.
In my limited understanding of this domain , a spatially indexed R-tree would be the way to go. Implementing this in matlab is bound to be difficult with the limited data structures available and probably not that efficient in the end.

Matt J
Matt J 2014년 10월 22일
편집: Matt J 2014년 10월 22일
You should partition your field into an NxN chequerboard of 2D bins, say with N=10. Use sort or histc to bin your Rect and XY coordinate data into each square of the chequerboard . Then you don't have to compare all XY coordinates with all Rectangles. You can loop over the chequerboard squares and just compare XY data lying in a given square with rectangle data lying in that square.
  댓글 수: 1
vivek
vivek 2014년 10월 22일
A simple example code would be very helpful for the idea mentioned.

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


Leonardo Souto Ferreira
Leonardo Souto Ferreira 2018년 2월 8일
U can accelerate your search using a quadtree for example.

카테고리

Help CenterFile Exchange에서 Surface and Mesh Plots에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by