Corte_Rama_Samplng_Box.m 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. function dummy_b = Corte_Rama_Samplng_Box( dummy_a, Columnas_Centros, Filas_Centros, Z_Centros, Sampling_Box_X, Sampling_Box_Y, Sampling_box_height )
  2. % Puntos dentro de la sampling box
  3. ind_sampling_box = (abs( dummy_a(:, 1) - Columnas_Centros ) <= Sampling_Box_X/2) &...
  4. (abs( dummy_a(:, 2) - Filas_Centros ) <= Sampling_Box_Y/2) &...
  5. (abs( dummy_a(:, 3) - Z_Centros )) <= Sampling_box_height/2;
  6. dummy_b = [];
  7. 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
  8. ind_sampling_box_0 = ind_sampling_box;
  9. dummy_0 = dummy_a(:, 1:3);
  10. % 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:
  11. % Buscamos los vecinos que están fuera de la caja:
  12. ind_0 = find( diff(ind_sampling_box) ~= 0);
  13. if ~isempty(ind_0)
  14. for i = ind_0'
  15. st = [dummy_a(i, 1), dummy_a(i, 2), dummy_a(i, 3)];
  16. go = [dummy_a(i+1, 1), dummy_a(i+1, 2), dummy_a(i+1, 3)];
  17. x = linspace(0,1,20);
  18. ls = go' + x.*(st - go)';
  19. [m1, ind1] = min( abs( abs( ls(1, :) - Columnas_Centros ) - Sampling_Box_X/2) );
  20. [m2, ind2] = min( abs( abs( ls(2, :) - Filas_Centros ) - Sampling_Box_Y/2) );
  21. [m3, ind3] = min( abs( abs( ls(3, :) - Z_Centros ) - Sampling_box_height/2));
  22. ind123 = [ind1, ind2, ind3];
  23. [~, iii] = min( [m1, m2, m3] );
  24. ind_final = ind123( iii );
  25. punto_corte = ls( :, ind_final )';
  26. % ¿Dónde lo metemos? En el lugar del i o i+1 que tenga un 0 en 'ind_sampling_box':
  27. if ind_sampling_box(i) == 0 % Lo metemos ahí
  28. dummy_0(i, :) = punto_corte;
  29. ind_sampling_box_0(i) = 1;
  30. else
  31. dummy_0(i+1, :) = punto_corte;
  32. ind_sampling_box_0(i+1) = 1;
  33. end
  34. end
  35. dummy_b = dummy_0( ind_sampling_box_0, : );
  36. else
  37. dummy_b = dummy_0;
  38. end
  39. end