Exemple #1
0
int main()
{
	int m[5][5];
	int i,j, k=1;

	for (j=0; j<5; j++)
		for (i=0; i<5; i++)
		{
			m[j][i] = k++;
		}

	m[3][3] = 0;
	m[2][1] = 0;

	print(m);

	FillUp(m,5);

	print(m);

	return 0;
}
static PrinterInfo* GetPrinterInfo(const char* printer_name)
{
	FILE *fp = NULL;
	char buff[MAXWORDSIZE], *ptr = NULL, *tmp = NULL;
	char* lib_name = NULL, *lib_version = NULL;
	int lib_len = 0;
	gboolean find_lang = FALSE;
	const char* ppd_file = NULL;
	int printer_type = PRINTER_TYPE_OTHER;

	ppd_file = cupsGetPPD(printer_name);
	if(NULL == ppd_file){
		return NULL;
	}
	fp = fopen(ppd_file, "r");
	if(NULL == fp){
		return NULL;
	}else{
		while((fgets(buff, MAXWORDSIZE, fp)) != NULL){
			ptr = FillUp(buff);
			tmp = ChkMainKey(ptr, PRINT_LANG, strlen(PRINT_LANG));
			if(tmp != NULL){
				if(strstr(tmp, "LIPS4") != NULL){
					printer_type = PRINTER_TYPE_LIPS;
				}else if(strstr(tmp, "PS3") != NULL){
					printer_type = PRINTER_TYPE_PS;
				}else if(strstr(tmp, "UFR2") != NULL){
					printer_type = PRINTER_TYPE_UFR2;
				}else if(strstr(tmp, "CAPT") != NULL){
					printer_type = PRINTER_TYPE_CAPT;
				}
				find_lang = TRUE;
			}else{
				tmp = ChkMainKey(ptr, PRINT_LIB_NAME, strlen(PRINT_LIB_NAME));
				if(tmp != NULL){
					SetLibInfo(tmp, &lib_name);
				}else{
					tmp = ChkMainKey(ptr, PRINT_LIB_NAME_VER, strlen(PRINT_LIB_NAME_VER));
					if(tmp != NULL){
						SetLibInfo(tmp, &lib_version);
					}
				}
			}
			if((TRUE == find_lang) && (lib_name != NULL) && (lib_version != NULL)){
				break;
			}
		}
	}
	fclose(fp);
	unlink(ppd_file);
	if(NULL == lib_name || NULL == lib_version){
		if(lib_name != NULL){
			free(lib_name);
			lib_name = NULL;
		}
		if(lib_version != NULL){
			free(lib_version);
			lib_version = NULL;
		}
		return NULL;
	}
	PrinterInfo* info = (PrinterInfo*)malloc(sizeof(PrinterInfo));
	if(NULL == info){
		if(lib_name != NULL){
			free(lib_name);
			lib_name = NULL;
		}
		if(lib_version != NULL){
			free(lib_version);
			lib_version = NULL;
		}
		return NULL;
	}
	memset(info, 0, sizeof(PrinterInfo));
	info->name = strdup(printer_name);
	lib_len = strlen(LIB_PREFIX)+ strlen(lib_name) + strlen(LIB_SUFFIX) + strlen(SEPERATOR) + strlen(lib_version) + 1;
	info->lib = (char*)malloc(lib_len);
	memset(info->lib, 0, lib_len);
	strcat(info->lib, LIB_PREFIX);
	strcat(info->lib, lib_name);
	strcat(info->lib, LIB_SUFFIX);
	strcat(info->lib, SEPERATOR);
	strcat(info->lib, lib_version);
	free(lib_version);
	free(lib_name);
	info->type = printer_type;
	return info;
}
void CInfiniteAmortizedNoise3D::initEdgeTables(const int x0, const int y0, const int z0, const int n){ 
  //compute gradients at corner points
  float b0  = h1(x0,   y0, z0),   b1  = h1(x0,   y0+1, z0  ),
        b2  = h1(x0+1, y0, z0),   b3  = h1(x0+1, y0+1, z0  ),
        b4  = h1(x0,   y0, z0+1), b5  = h1(x0,   y0+1, z0+1),
        b6  = h1(x0+1, y0, z0+1), b7  = h1(x0+1, y0+1, z0+1),

        b8  = h2(x0,   y0, z0),   b9  = h2(x0,   y0+1, z0  ),
        b10 = h2(x0+1, y0, z0),   b11 = h2(x0+1, y0+1, z0  ),
        b12 = h2(x0,   y0, z0+1), b13 = h2(x0,   y0+1, z0+1),
        b14 = h2(x0+1, y0, z0+1), b15 = h2(x0+1, y0+1, z0+1);
  
  //fill inferred gradient tables from corner gradients

  FillUp(uax,  sinf(b0)*sinf(b8),  n); FillDn(vax,  sinf(b4)*sinf(b12), n);
  FillUp(ubx,  sinf(b1)*sinf(b9),  n); FillDn(vbx,  sinf(b5)*sinf(b13), n);
  FillUp(uay, -sinf(b0)*cosf(b8),  n); FillUp(vay, -sinf(b4)*cosf(b12), n);
  FillDn(uby, -sinf(b1)*cosf(b9),  n); FillDn(vby, -sinf(b5)*cosf(b13), n);

  FillUp(uaz,      cosf(b0),      n); FillUp(vaz,      cosf(b4),      n);
  FillUp(ubz,      cosf(b1),      n); FillUp(vbz,      cosf(b5),      n);
  FillUp(ucx,  sinf(b2)*sinf(b10), n); FillDn(vcx,  sinf(b6)*sinf(b14), n);
  FillUp(udx,  sinf(b3)*sinf(b11), n); FillDn(vdx,  sinf(b7)*sinf(b15), n);

  FillUp(ucy, -sinf(b2)*cosf(b10), n); FillUp(vcy, -sinf(b6)*cosf(b14), n);
  FillDn(udy, -sinf(b3)*cosf(b11), n); FillDn(vdy, -sinf(b7)*cosf(b15), n);
  FillDn(ucz,      cosf(b2),      n); FillDn(vcz,      cosf(b6),      n);
  FillDn(udz,      cosf(b3),      n); FillDn(vdz,      cosf(b7),      n); 
} //initEdgeTables
Exemple #4
0
Fichier : graph.c Projet : rolk/ug
static INT ClipPolygon (COORD_POINT *in, INT nin,
                        SHORT_POINT *out, INT *nout)
{
  INT i,FillupStart,side1,side2,FirstSide,reject,flag,left,leftmark,right,rightmark,orientation;
  SHORT_POINT out1,out2;
  COORD_POINT point[3];
  DOUBLE norm, lambda, ScalarPrd;

  /* initializations */
  *nout = 0;

  /* check if polygon is degenerated */
  if (nin<3) return (0);

  /* decide whether polygon is left or right handed */
  left = right = orientation = 0;
  for (i=0; i<nin; i++)
  {
    if (((in[i].x-in[(i-1+nin)%nin].x)*(in[(i+1)%(nin)].y-in[i].y)) >=
        ((in[i].y-in[(i-1+nin)%nin].y)*(in[(i+1)%(nin)].x-in[i].x)))
      left++;
    else
      leftmark = i;

    if (((in[i].x-in[(i-1+nin)%nin].x)*(in[(i+1)%(nin)].y-in[i].y)) <=
        ((in[i].y-in[(i-1+nin)%nin].y)*(in[(i+1)%(nin)].x-in[i].x)))
      right++;
    else
      rightmark = i;
  }
  if (left == nin)
    orientation = CLOCKWISE;
  else if (right == nin)
    orientation = COUNTERCLOCKWISE;
  else if (left == nin-1)
  {
    SubtractCoordPoint(in[leftmark],in[(leftmark-1+nin)%nin],&(point[0]));
    SubtractCoordPoint(in[(leftmark+1)%nin],in[(leftmark-1+nin)%nin],&(point[1]));
    EuklidNormCoordPoint(point[1],&norm);
    ScalarProductCoordPoint(point[0],point[1],&ScalarPrd);
    if (norm < SMALL_C)
      lambda = 1.0;
    else
      lambda = ScalarPrd/norm/norm;
    LinCombCoordPoint(1.0, in[(leftmark-1+nin)%nin], lambda, point[1], &(point[2]));
    SubtractCoordPoint(in[leftmark],point[2],&(point[0]));
    EuklidNormCoordPoint(point[0],&norm);
    in[leftmark] = point[2];
    orientation = CLOCKWISE;
  }
  else if (right == nin-1)
  {
    SubtractCoordPoint(in[rightmark],in[(rightmark-1+nin)%nin],&(point[0]));
    SubtractCoordPoint(in[(rightmark+1)%nin],in[(rightmark-1+nin)%nin],&(point[1]));
    EuklidNormCoordPoint(point[1],&norm);
    ScalarProductCoordPoint(point[0],point[1],&ScalarPrd);
    if (norm < SMALL_C)
      lambda = 1.0;
    else
      lambda = ScalarPrd/norm/norm;
    LinCombCoordPoint(1.0, in[(rightmark-1+nin)%nin], lambda, point[1], &(point[2]));
    SubtractCoordPoint(in[rightmark],point[2],&(point[0]));
    EuklidNormCoordPoint(point[0],&norm);
    in[rightmark] = point[2];
    orientation = COUNTERCLOCKWISE;
  }
  else
    return(1);


  /* the main loop */
  FillupStart = -1;
  flag = 0;
  for(i=0; i<nin; i++)
  {
    ClipLine(in[i],in[(i+1)%(nin)],&out1,&out2,&reject,&side1,&side2);
    if (!reject)
    {
      if (flag == 0)
      {
        FirstSide = side1;
        flag = 1;
      }
      if (FillupStart != -1)
        FillUp (FillupStart,side1,orientation,out,nout);
      FillupStart = side2;
      out[(*nout)++] = out1;
      if (side2 != -1)
        out[(*nout)++] = out2;
    }
  }
  if (flag && (FirstSide!=-1))
    FillUp (FillupStart,FirstSide,orientation,out,nout);
  if (!flag)
  {
    /* test if zero vector is in the interior of the polygon */
    if (orientation==1)
    {
      left  = 0;
      for (i=0; i<nin; i++)
        left += (in[(i+1)%(nin)].x*in[i].y >= in[i].x*in[(i+1)%(nin)].y);
      /*if (left == nin)
              FillUpTot(out,nout);*/
    }
    else
    {
      right  = 0;
      for (i=0; i<nin; i++)
        right += (in[(i+1)%(nin)].x*in[i].y <= in[i].x*in[(i+1)%(nin)].y);
      /* if (right == nin)
              FillUpTot(out,nout); */
    }
  }
  return (0);
}