Elaboradar  0.1
 Tutto Classi Namespace File Funzioni Variabili Tipi enumerati (enum) Gruppi
void elaboradar::SingleCart::creo_cart ( const radarelab::Volume< double > &  volume,
unsigned int  el_index 
)

conversione da polare a cartesiano alta risoluzione

funzione che crea l'output cartesiano dal polare

cicla sui quadranti e su i e j, usando il range e l'azimut ottenuti tramite la funzione creo_matrice_conv() NOTA Questa funzione mappa il campo in input in modo brutale su un unsigned char. DA SISTEMARE.

Parametri
[in]volume- volume passato per grafica
[in]el_index- indice elevazione richiesta da graficare

Definizione alla linea 1528 del file cum_bac.cpp.

Referenzia cart, e max_bin.

1529 {
1530  LOG_CATEGORY("radar.singlecart");
1531 
1532  //matrici per ricampionamento cartesiano
1533  //int x,y,irange,az,iaz,az_min,az_max,cont;
1534  int x,y,iaz,az_min,az_max;
1535  float az;
1536  CartData cd(max_bin);
1537 
1538  for(unsigned i=0; i<max_bin *2; i++)
1539  for(unsigned j=0; j<max_bin *2; j++)
1540  cart(i, j) = MISSING;
1541 
1542  LOG_INFO("Creo_cart - %u", max_bin);
1543 
1544  for(unsigned quad=0; quad<4; quad++)
1545  for(unsigned i=0; i<max_bin; i++)
1546  for(unsigned j=0; j<max_bin; j++)
1547  {
1548  unsigned irange = (unsigned)round(cd.range(i, j));
1549  if (irange >= max_bin)
1550  continue;
1551  switch(quad)
1552  {
1553  case 0:
1554  x = max_bin + i;
1555  y = max_bin - j;
1556  az = cd.azimut(i, j);
1557  break;
1558  case 1:
1559  x = max_bin + j;
1560  y = max_bin + i;
1561  az = cd.azimut(i, j) + 90.;
1562  break;
1563  case 2:
1564  x = max_bin - i;
1565  y = max_bin + j;
1566  az = cd.azimut(i, j) + 180.;
1567  break;
1568  case 3:
1569  x = max_bin - j;
1570  y = max_bin - i;
1571  az = cd.azimut(i, j)+270.;
1572  break;
1573  }
1574 
1575  az_min = (int)((az - .45)/.9);
1576  az_max = ceil((az + .45)/.9);
1577 
1578 
1579  if(az_min < 0)
1580  {
1581  az_min = az_min + NUM_AZ_X_PPI;
1582  az_max = az_max + NUM_AZ_X_PPI;
1583  }
1584  for(iaz = az_min; iaz<az_max; iaz++){
1585  // Enrico: cerca di non leggere fuori dal volume effettivo
1586  unsigned char sample = 0;
1587  if (irange < volume[el_index].beam_size)
1588  sample = max((unsigned char) (volume[el_index].get(iaz%NUM_AZ_X_PPI, irange)), (unsigned char)1); // il max serve perchè il valore di MISSING è 0
1589  if(cart(y, x) <= sample) cart(y, x) = sample;
1590  }
1591  }
1592 }
radarelab::Image< unsigned char > cart
vol_pol interpolated in a cartesian map
Definition: cum_bac.h:337
const unsigned max_bin
dimensione matrice
Definition: cum_bac.h:334