Azzera filtri
Azzera filtri

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 visualizzazioni (ultimi 30 giorni)
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.

Risposte (1)

Josh
Josh il 17 Ago 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, :);

Categorie

Scopri di più su Shifting and Sorting Matrices in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by