Ejemplo n.º 1
0
bool MeshFace::isPtInsideFace(double x, double y, double z)
{
   int i;
   double m1,m2;
   double anglesum=0,costheta;
   point p1,p2;
   vector<Node*> nodes = getNodes();
   int nen = nodes.size();

   for (i=0;i<nen;i++) {

      p1.x = nodes[i]->x() - x;
      p1.y = nodes[i]->y() - y;
      p1.z = nodes[i]->z() - z;
      p2.x = nodes[(i+1)%nen]->x() - x;
      p2.y = nodes[(i+1)%nen]->y() - y;
      p2.z = nodes[(i+1)%nen]->z() - z;

      m1 = MODULUS(p1);
      m2 = MODULUS(p2);
      if (m1*m2 <= EPSILON)
         return(true); /* We are on a node, consider this inside */
      else
         costheta = (p1.x*p2.x + p1.y*p2.y + p1.z*p2.z) / (m1*m2);

      anglesum += acos(costheta);
   }
   if(anglesum <= (TWOPI+EPSILON) && anglesum >= (TWOPI-EPSILON)){
	   return(true);
   }else{
	   return(false);
   }
}
Ejemplo n.º 2
0
int getResult(int *Array, int size, int k, int n)
{
	int i, cost = 0,itemsGet, *countArray, range = n<5 ? 10 - n : n + 1;
	countArray = (int *)malloc(sizeof(int)*range);
	for (i = 0; i<range; i++)
		countArray[i] = 0;
	for (i = 0; i<size; i++)
		countArray[MODULUS(n - Array[i])]++;
	itemsGet = countArray[0];
	for (i = 1; itemsGet < k; i++)
	{
		itemsGet += countArray[i];
		cost += countArray[i] * i;
	}
	if (itemsGet>k)
		cost -= (itemsGet - k)*(i - 1);
	return cost;

}
Ejemplo n.º 3
0
double
PTtan(double arg)
{
    return (tan(MODULUS(arg, M_PI)));
}
Ejemplo n.º 4
0
double
PTsin(double arg)
{
    return (sin(MODULUS(arg, 2 * M_PI)));
}
Ejemplo n.º 5
0
double
PTcos(double arg)
{
    return (cos(MODULUS(arg, 2 * M_PI)));
}