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); } }
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; }
double PTtan(double arg) { return (tan(MODULUS(arg, M_PI))); }
double PTsin(double arg) { return (sin(MODULUS(arg, 2 * M_PI))); }
double PTcos(double arg) { return (cos(MODULUS(arg, 2 * M_PI))); }