Effacer les filtres
Effacer les filtres

I need to remove some data points from a matrix and then use these points in a function? how would i do this? The matrix is 3x1470, each column refers to XYZ and i am looking to remove all points within a certain radius from the centre.

4 vues (au cours des 30 derniers jours)
I am doing analysis is vibrometer readings and there is a circular discontinuity in the centre of the plate. I am looking to remove all data points within a certain radius of the centre of the plate and use the remaining data in energy calculations for which I have working functions.

Réponses (1)

Josh
Josh le 17 Août 2017
Here's how to do it using bsxfun:
% I'll define 1000 random points in a 100 x 100 x 100 cube (in your case,
% you'll just use your xyz data):
points = 100 * rand(1000, 3);
% I'll define the position of the center of the plate:
center = [50, 50, 50];
% I'll define the radius I want to clear
radius = 15;
% This next part can be put in one line, but I'll break it up so I can
% explain it:
% Get the vector distance between all the points and the center of the
% plate:
distance = bsxfun(@minus, points, center);
% If you'r not famililar with bsxfun, what I just wrote works the same as:
distance = points - repmat(center, size(points, 1), 1);
% but has less overhead
% Now calculate the (squared) absolute distance
distance = sum(distance .^ 2, 2);
% Now create a logical array where each value corresponds to one of your
% input points. 'True' means keep the point, 'False' means get rid of it,
% it's too close to the center:
keep = distance > radius .^ 2;
% Now discard the points that are too close to the center:
points = points(keep, :);

Catégories

En savoir plus sur Shifting and Sorting Matrices dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by