function dummy_b = Corte_Rama_Samplng_Box( dummy_a, Columnas_Centros, Filas_Centros, Z_Centros, Sampling_Box_X, Sampling_Box_Y, Sampling_box_height ) % Puntos dentro de la sampling box ind_sampling_box = (abs( dummy_a(:, 1) - Columnas_Centros ) <= Sampling_Box_X/2) &... (abs( dummy_a(:, 2) - Filas_Centros ) <= Sampling_Box_Y/2) &... (abs( dummy_a(:, 3) - Z_Centros )) <= Sampling_box_height/2; dummy_b = []; if sum( ind_sampling_box ) ~= 0 % Esto es cuando hay puntos dentro de la samplong box; si n hay puntos en la sampling box se devuelve un vacío ind_sampling_box_0 = ind_sampling_box; dummy_0 = dummy_a(:, 1:3); % Vamos a buscar los puntos de intersección entre la sampling box y la recta que une un punto de dentro con su vecino de fuera de la sampling box: % Buscamos los vecinos que están fuera de la caja: ind_0 = find( diff(ind_sampling_box) ~= 0); if ~isempty(ind_0) for i = ind_0' st = [dummy_a(i, 1), dummy_a(i, 2), dummy_a(i, 3)]; go = [dummy_a(i+1, 1), dummy_a(i+1, 2), dummy_a(i+1, 3)]; x = linspace(0,1,20); ls = go' + x.*(st - go)'; [m1, ind1] = min( abs( abs( ls(1, :) - Columnas_Centros ) - Sampling_Box_X/2) ); [m2, ind2] = min( abs( abs( ls(2, :) - Filas_Centros ) - Sampling_Box_Y/2) ); [m3, ind3] = min( abs( abs( ls(3, :) - Z_Centros ) - Sampling_box_height/2)); ind123 = [ind1, ind2, ind3]; [~, iii] = min( [m1, m2, m3] ); ind_final = ind123( iii ); punto_corte = ls( :, ind_final )'; % ¿Dónde lo metemos? En el lugar del i o i+1 que tenga un 0 en 'ind_sampling_box': if ind_sampling_box(i) == 0 % Lo metemos ahí dummy_0(i, :) = punto_corte; ind_sampling_box_0(i) = 1; else dummy_0(i+1, :) = punto_corte; ind_sampling_box_0(i+1) = 1; end end dummy_b = dummy_0( ind_sampling_box_0, : ); else dummy_b = dummy_0; end end