1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- 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
|