Exemplo n.º 1
0
Arquivo: FDM.c Projeto: jagd/Ladungen
struct PPM *render_potential(
	int h,
	int w,
	float *potential,
	COLOR (*table_func)(float rate)
	)
{
	int i;
	float val_max, val_min, val_range;
	struct PPM *ppm;

	if (w <= 0 || h <= 0) {
		return NULL;
	}

	val_max = *potential;
	val_min = *potential;

	for (i = 1; i < w*h; ++i) {
		if (potential[i] < val_min) {
			val_min = potential[i];
		}
		if (potential[i] > val_max) {
			val_max = potential[i];
		}
	}

	val_range = val_max - val_min;

	ppm = PPM_init_hw(h, w);

	if (val_range != 0) {
		for (i = 0; i < w*h; ++i) {
			ppm->buf[i] = table_func(
					(potential[i] - val_min) / val_range);
		}
	} else {
		for (i = 0; i < w*h; ++i) {
			ppm->buf[i] = table_func(1);
		}
	}

	return ppm;
}
Exemplo n.º 2
0
/* Functions to start tables */
static void write_table(int table_num, RA charges, int (*table_func)(RA, int)) 
{
  g_curr_table = table_num;  
  
  ARB_NUM_SET_ZERO (&g_table_total);
  if (!table_func(charges, TABLE_COUNT))
    return;

  /* write the header */
  write_table_header(FALSE);

  g_in_a_table = TRUE;

  /* write the table body */
  table_func(charges, TABLE_PRINT);

  /* write the footer */
  /* adjust the grand_total first, since the footer might use it */
  arb_num_arith (&g_table_grand_total, &g_table_grand_total, ARB_NUM_ADD, &g_table_total);
  finish_table();
  g_in_a_table=FALSE;
}