Example #1
0
int main (void) {
  A2 = fA();
  B2 = fB();
  C2 = fC();
  D2 = fD();
  return all (0);
}
Example #2
0
void g()
{
  mixed_up<A, B, C> m;
  fA(m);
  fB(m);
  fC(m);
}
Example #3
0
TreeNode * tree_search(TreeNode *l,PData matchKey,CompareFunction fC){
	if (!l)
		return NULL;
	printf(", (%d ,%d),\n",(int)l->data,(int)matchKey);
	if (fC(matchKey,l->data) == 0)
		return l;
	TreeNode *x= l->first_child;
	while(x){
		TreeNode *y = tree_search(x,matchKey,fC);
		if (y)
			return y;
		else
			x=x->next;
	}
	return NULL;
}
Example #4
0
float forceThin(float** arr, const int N, const int M, const int x, const int y, const std::vector<ivec2> borders)
{
   vec2 a(x-0.5,y+0.5);
   vec2 b(x+0.5,y+0.5);
   vec2 c(x+0.5,y-0.5);
   vec2 d(x-0.5,y-0.5);

   vec2 fA(0.0,0.0);
   vec2 fB(0.0,0.0);
   vec2 fC(0.0,0.0);
   vec2 fD(0.0,0.0);

   for (unsigned int i=0; i < borders.size(); ++i)
   {
      if (distance(ivec2(x,y), borders[i]) <= 16)
      {
         std::vector<ivec2> line;
         line = draw_line(ivec2(x,y), borders[i]);

         bool outofsight = false;
         //printf("(%d,%d)\n(%d,%d) %zd\n", x, y, borders[i].x, borders[i].y, line.size());
         for (unsigned int j=0; j < line.size(); ++j)
         {
            //printf("\t%d\n", j);
            outofsight |= arr[line[j].x][line[j].y] == 0.5;
         }

         if (!outofsight)
         {
            float dist = distance(a, borders[i]);
            float dx = a.x - borders[i].x;
            float dy = a.y - borders[i].y;
            fA = fA + vec2(dx/(abs(dx)+abs(dy)) / dist, dy/(abs(dx)+abs(dy)) / dist);

            dist = distance(b, borders[i]);
            dx = b.x - borders[i].x;
            dy = b.y - borders[i].y;
            fB = fB + vec2(dx/(abs(dx)+abs(dy)) / dist, dy/(abs(dx)+abs(dy)) / dist);

            dist = distance(c, borders[i]);
            dx = c.x - borders[i].x;
            dy = c.y - borders[i].y;
            fC = fC + vec2(dx/(abs(dx)+abs(dy)) / dist, dy/(abs(dx)+abs(dy)) / dist);

            dist = distance(d, borders[i]);
            dx = d.x - borders[i].x;
            dy = d.y - borders[i].y;
            fD = fD + vec2(dx/(abs(dx)+abs(dy)) / dist, dy/(abs(dx)+abs(dy)) / dist);
         }
      }
   }

   //S |= fA.x*fB.x <= 0.0 && abs(fA.y)+abs(fB.y) > abs(fA.x)+abs(fB.x);
   //S |= fC.x*fD.x <= 0.0 && abs(fC.y)+abs(fD.y) > abs(fC.x)+abs(fD.x);
   //S |= fA.y*fD.y <= 0.0 && abs(fA.y)+abs(fD.y) > abs(fA.x)+abs(fD.x);
   //S |= fB.y*fC.y <= 0.0 && abs(fB.y)+abs(fC.y) > abs(fB.x)+abs(fC.x);
   //S |= fA.x*fC.x <= 0.0 && fA.y * fC.y <= 0.0;
   //S |= fB.x*fD.x <= 0.0 && fB.y * fD.y <= 0.0;

   //S |= fA.x*fB.x <= 0.0 && fC.x*fD.x <= 0.0 && (abs(fA.x)+abs(fB.x) > abs(fA.y)+abs(fB.y) || abs(fC.x)+abs(fD.x) > abs(fC.y)+abs(fD.y));
   //S |= fA.y*fD.y <= 0.0 && fB.y*fC.y <= 0.0 && (abs(fA.y)+abs(fD.y) > abs(fA.x)+abs(fD.x) || abs(fB.y)+abs(fC.y) > abs(fB.x)+abs(fC.x));
   //S |= fA.x*fC.x <= 0.0 && fA.y*fC.y <= 0.0;
   //S |= fB.x*fD.x <= 0.0 && fB.y*fD.y <= 0.0;

   //dot products to find change in direction
   float dot;
   float min_dot = INFINITY;

   dot = fA.x*fB.x + fA.y*fB.y;
   if (dot < min_dot)
      min_dot = dot;
   dot = fB.x*fC.x + fB.y*fC.y;
   if (dot < min_dot)
      min_dot = dot;
   dot = fA.x*fD.x + fA.y*fD.y;
   if (dot < min_dot)
      min_dot = dot;
   dot = fC.x*fD.x + fC.y*fD.y;
   if (dot < min_dot)
      min_dot = dot;
   dot = fA.x*fC.x + fA.y*fC.y;
   if (dot < min_dot)
      min_dot = dot;
   dot = fB.x*fD.x + fB.y*fD.y;
   if (dot < min_dot)
      min_dot = dot;

   return min_dot;
}