Example #1
0
/**
	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;
}
Example #2
0
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));
}
Example #3
0
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;   
}
Example #4
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
}