/** busca un rectángulo dentro del R-Tree. */ Dynamic_array* buscar(Nodo nodo, Rectangulo rect) { int i, j; Dynamic_array *rects; // arreglo dinámico de rectangulos initArray(rects, 1); // recorremos los MBR's del nodo for(i=0;i<=nodo.ultimo;i++) { // si el rectangulo se intersecta con un MBR if (interseccion(nodo.mbr[i].rect, rect)){ // si es una hoja. retornar rectangulo; if (nodo.mbr[i].nodo_hijo == -1) { insertArray(rects, nodo.mbr[i].rect); // seguir en profundidad } else { // buscar en los hijos Nodo nodo_hijo = leer_nodo_en_disco(nodo.mbr[i].nodo_hijo); Dynamic_array *rects_hijos = buscar(nodo_hijo, rect); // se insertan en el grupo general for(j=0;j<rects_hijos->used;j++) { insertArray(rects, rects_hijos->array[j]); } // se libera la memoria. freeArray(rects_hijos); } } } return rects; }
recta3d plano3d::interseccion(plano3d p) //devuelve la recta de interseccion entre un plano y este plano { recta3d r; r.vector = normal^(normal^(p.normal)); r.punto = punto; return (recta3d(interseccion(r),normal^p.normal)); }
int main(){ Elem e1[10]={65,66,67,68,69,70}; Elem e2[10]={69,70,71,72,73,74,75,76}; Conjunto c1=crea(e1,6); Conjunto c2=crea(e2,8); imprime(union1(c1,c2)); puts(""); printf("%d",cardinalidad(union1(c1,c2))); puts(""); imprime(interseccion(c1,c2)); puts(""); printf("%d\n",cardinalidad(interseccion(c1,c2))); imprime(diferencia(c1,c2)); return 0; }
punto3d plano3d::proyeccion(punto3d p) //Devuelve el punto del plano más cercano al punto dado { return(interseccion(recta3d(p,normal))); //Sacando la intersección de una recta normal al plano que pasa por el punto dado }