Convenient way to define a boundary
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Joppy
el 21 de Jun. de 2017
Comentada: Paul White
el 9 de En. de 2018
Hi.
Question: Is there any convenient way to define a collection of points that may act as a MatlabFunction?
Context and more detail:
I am fiddling around with some billiard style problems. Basically i need a boundary (a box or space that particles exist in), that can be treated as a function which i can test for collisions with.
Currently i have created my boundaries by defining straight lines (y = mx + c), and then used polyfit on these lines so that i can treat them as a Matlab Function.
This works for the most part as i can successfully test when a particle has collided with a wall, but it is a bit clunky. Namely, some of the straight lines intersect other parts of the boundary, which causes problems in collision tests.
I am open for any ideas, suggestions or recommendations. Thank you!
Note:
I am developing original code for these 'simulations'. I am aware of some of the toolboxes available for this sort of thing, but again, trying to build a small simulation from scratch.
2 comentarios
KSSV
el 21 de Jun. de 2017
Question is not clear....you have a group of points..you want to draw a boundary enclosing all the points?
Respuesta aceptada
KSSV
el 21 de Jun. de 2017
YOu can know whether the given point intersecting/ lying on the boundary using inpolygon. You can draw boundary enclosing the points in two ways.
- Exact boundary using the boundary function. If boundary doesn't exist (Introduced in R2014b) you can use convhull .
- You can draw a rectangle aka bounding box.
Check the below codes for each case.
N = 20 ;
x = rand(N,1) ;
y = rand(N,1) ;
%%Exact boundary
idx = boundary(x,y) ;
% idx = convhull(x,y) ;
% Check whether points intersecting boundary
[in,on] = inpolygon(x,y,x(idx),y(idx)) ;
figure
hold on
plot(x,y,'.b')
plot(x(idx),y(idx),'r')
plot(x(on),y(on),'Ok')
%%closed box
x0 = min(x) ; x1 = max(x) ;
y0 = min(y) ; y1 = max(y) ;
L = abs(x1-x0) ;
B = abs(y1-y0) ;
%
R = [x0 y0 ; x1 y0; x1 y1 ; x0 y1 ; x0 y0] ;
% Check whether points intersecting boundary
[in,on] = inpolygon(x,y,R(:,1),R(:,2)) ;
figure
hold on
plot(x,y,'.b')
plot(R(:,1),R(:,2),'r')
plot(x(on),y(on),'Ok')
1 comentario
Paul White
el 9 de En. de 2018
I am using the Kalman Filter to 2D track a single moving object. I have used the rectangle() function to make a boundary around the video. Can I use inpolygon to detect when this randomly moving object touches the rectangle boundary?
Más respuestas (0)
Ver también
Categorías
Más información sobre Get Started with Curve Fitting Toolbox en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!