int punto_convexhull (punto3d punto, punto3d *hull, int k) { register int i; punto3d centro = centroide(hull, k); punto3d P = punto3d(punto.x, punto.y, centro.z); for (i=0; i<k; i++) { if((((centro-hull[i])^(hull[(i+1)%k]-hull[i])).z>0)!=(((P-hull[i])^(hull[(i+1)%k]-hull[i])).z>0)) return (0); } /* for (i=1; i<k; i++) { if((((centro-hull[i-1])^(hull[i]-hull[i-1])).z>0)!=(((P-hull[i-1])^(hull[i]-hull[i-1])).z>0)) return (0); } if((((centro-hull[k])^(hull[0]-hull[k])).z>0)!=(((P-hull[k])^(hull[0]-hull[k])).z>0)) return (0);*/ return (1); //El puntos esta del mismo lado de los semiplanos que el ctentroide, esta en su interior. }
/** * Calculamo el centro de gravedad de la imagen como aproximacion al centro de la misma * y asi aplicar Hough entorno al mismo minimizar coste computacionaly * * * @param im_in Contiene la imagen a analizar * * @return Point Devolvemos las coordenadas del centro */ Point Centrodegravedad (const Vector<Point> puntos){ Point centroide(0,0); double x = 0; double y = 0; for (unsigned int i=0; i < puntos.size(); i++){ x += puntos[i].x; y += puntos[i].y; } x /= puntos.size(); y /= puntos.size(); centroide.x = x; centroide.y = y; cout << "Centroide.X: " << centroide.x << "\tCentroide.Y: " << centroide.y << endl; return centroide; }
int main(void){ //***allocate memory resources for a list of NUM_PUNTOS 2D points struct punto_t pres; int p=0; int x=0; int y=0; for(p=0; p<NUM_PUNTOS; p++){ printf("Introduzca las coordenadas X Y del punto\n"); scanf("%d %d", &x, &y); pv[p].x=x; pv[p].y=y; } pres=centroide(pv, NUM_PUNTOS); printf("(%.3f, %.3f)\n",pres.x, pres.y); //***free memory resources appropiately return 0; }