Example #1
0
		Metal1() {

			fileLeft = "/apps/workspaces/kiste_data/stereo/3/left.png";
			fileRight = "/apps/workspaces/kiste_data/stereo/3/right.png";
			imgLeft = ImageFactory::readPNG(fileLeft);
			imgRight = ImageFactory::readPNG(fileRight);

			MatchingSAD sad(imgLeft, imgRight, 15);
			Matching matcher;

			Point2i pl1(608,834);	Point2i pr1(400,873);		//pr1 = matcher.refine(sad, pl1, pr1);
			Point2i pl2(357,485);	Point2i pr2(292,470);		//pr2 = matcher.refine(sad, pl2, pr2);
			Point2i pl3(461,672);	Point2i pr3(294,678);		//pr3 = matcher.refine(sad, pl3, pr3);
			Point2i pl4(524,507);	Point2i pr4(410,523);		//pr4 = matcher.refine(sad, pl4, pr4);
			Point2i pl5(518,479);	Point2i pr5(440,493);		//pr5 = matcher.refine(sad, pl5, pr5);
			Point2i pl6(586,405);	Point2i pr6(476,431);		//pr6 = matcher.refine(sad, pl6, pr6);
			Point2i pl7(593,324);	Point2i pr7(532,349);		//pr7 = matcher.refine(sad, pl7, pr7);
			Point2i pl8(673,366);	Point2i pr8(596,405);		//pr8 = matcher.refine(sad, pl8, pr8);

			fm.addCorrespondence(pl1,	pr1);
			fm.addCorrespondence(pl2,	pr2);
			fm.addCorrespondence(pl3,	pr3);
			fm.addCorrespondence(pl4,	pr4);
			fm.addCorrespondence(pl5,	pr5);
			fm.addCorrespondence(pl6,	pr6);
			fm.addCorrespondence(pl7,	pr7);
			fm.addCorrespondence(pl8,	pr8);
			//fm.addCorrespondence(pl9,	pr9);

			fm.estimate();

		}
Example #2
0
		House1() {

			fileLeft = "/apps/workspaces/kiste_data/stereo/4/left.png";
			fileRight = "/apps/workspaces/kiste_data/stereo/4/right.png";
			imgLeft = ImageFactory::readPNG(fileLeft);
			imgRight = ImageFactory::readPNG(fileRight);

			MatchingSAD sad(imgLeft, imgRight, 15);
			Matching matcher;

			Point2i pl1(110,244);	Point2i pr1(198,296);		//pr1 = matcher.refine(sad, pl1, pr1);
			Point2i pl2(273,242);	Point2i pr2(309,249);		//pr2 = matcher.refine(sad, pl2, pr2);
			Point2i pl3(88,117);	Point2i pr3(129,121);		//pr3 = matcher.refine(sad, pl3, pr3);
			Point2i pl4(247,122);	Point2i pr4(244,89);		//pr4 = matcher.refine(sad, pl4, pr4);
			Point2i pl5(321,100);	Point2i pr5(320,50);		//pr5 = matcher.refine(sad, pl5, pr5);
			Point2i pl6(398,162);	Point2i pr6(428,125);		//pr6 = matcher.refine(sad, pl6, pr6);
			Point2i pl7(393,282);	Point2i pr7(424,273);		//pr7 = matcher.refine(sad, pl7, pr7);
			Point2i pl8(266,154);	Point2i pr8(278,132);		//pr8 = matcher.refine(sad, pl8, pr8);

			fm.addCorrespondence(pl1,	pr1);
			fm.addCorrespondence(pl2,	pr2);
			fm.addCorrespondence(pl3,	pr3);
			fm.addCorrespondence(pl4,	pr4);
			fm.addCorrespondence(pl5,	pr5);
			fm.addCorrespondence(pl6,	pr6);
			fm.addCorrespondence(pl7,	pr7);
			fm.addCorrespondence(pl8,	pr8);
			//fm.addCorrespondence(pl9,	pr9);

			fm.estimate();

		}
Example #3
0
void IISource::get(Term& x) {
#if 1
  x.setToOne();
  int type = getType();
  if(type==GBInputNumbers::s_IOFUNCTION) {
    pair<bool,Alias<ISource> > pr(queryNamedFunction("Times"));
    if(pr.first) {
      pr.second.access().get(x.Coefficient());
      pr.second.access().get(x.MonomialPart());
    } else {
      pair<bool,Alias<ISource> > pr2(queryNamedFunction("Rational"));
      if(pr2.first) {
        pr2.second.access().get(x.Coefficient());
      } else {
        get(x.MonomialPart());
      };
    };
  } else if(type==GBInputNumbers::s_IOINTEGER) {
    get(x.Coefficient());
  } else {
    get(x.MonomialPart());
  };
#else
  DBG();
#endif
};
Example #4
0
		IDIS() {

			fileLeft = "/apps/workspaces/kiste_data/stereo/2/left.png";
			fileRight = "/apps/workspaces/kiste_data/stereo/2/right.png";
			imgLeft = ImageFactory::readPNG(fileLeft);
			imgRight = ImageFactory::readPNG(fileRight);

			MatchingSAD sad(imgLeft, imgRight, 15);
			Matching matcher;

			Point2i pl1(257,369);	Point2i pr1(98,367);		pr1 = matcher.refine(sad, pl1, pr1);
			Point2i pl2(261,579);	Point2i pr2(101,589);		pr2 = matcher.refine(sad, pl2, pr2);
			Point2i pl3(282,692);	Point2i pr3(121,708);		pr3 = matcher.refine(sad, pl3, pr3);
			Point2i pl4(657,673);	Point2i pr4(520,678);		pr4 = matcher.refine(sad, pl4, pr4);
			Point2i pl5(704,247);	Point2i pr5(569,247);		pr5 = matcher.refine(sad, pl5, pr5);
			Point2i pl6(816,641);	Point2i pr6(679,641);		pr6 = matcher.refine(sad, pl6, pr6);
			Point2i pl7(1113,503);	Point2i pr7(964,501);		pr7 = matcher.refine(sad, pl7, pr7);
			Point2i pl8(1025,472);	Point2i pr8(882,472);		pr8 = matcher.refine(sad, pl8, pr8);
			Point2i pl9(1096,345);	Point2i pr9(948,348);		pr9 = matcher.refine(sad, pl9, pr9);

			fm.addCorrespondence(pl1,	pr1);
			fm.addCorrespondence(pl2,	pr2);
			fm.addCorrespondence(pl3,	pr3);
			fm.addCorrespondence(pl4,	pr4);
			fm.addCorrespondence(pl5,	pr5);
			fm.addCorrespondence(pl6,	pr6);
			fm.addCorrespondence(pl7,	pr7);
			fm.addCorrespondence(pl8,	pr8);
			//fm.addCorrespondence(pl9,	pr9);

			fm.estimate();

		}
Example #5
0
 bool egcd(const bigint &b1, const bigint &b2, bigint &dr, bigint &r1, bigint &r2) const {
     bool scs;
     bigint dd(0), ppr1(0), ppr2(0), pr1(0), pr2(0), q, r(0), tr1(0), tr2(0);
     if(compare(b1, b2) > 0) {
         dd = b1;
         dr = b2;
         pr1 = one;
         pr2.init();
     } else {
         dd = b2;
         dr = b1;
         pr1.init();
         pr2 = one;
     }
     r1 = pr2;
     r2 = pr1;
     while((scs = divide(dd, dr, q, r)) && r.capacity() > 0) {
         ppr1 = pr1;
         ppr2 = pr2;
         pr1 = r1;
         pr2 = r2;
         tr1.init();
         tr2.init();
         if(!(scs = (signedmultiply(q, pr1, tr1) && signedsubtract(ppr1, tr1, r1) &&
                     signedmultiply(q, pr2, tr2) && signedsubtract(ppr2, tr2, r2)))) {
             break;
         }
         dd = dr;
         dr = r;
         q.init();
         r.init();
     }
     return scs;
 }
Example #6
0
		House3D() {

			fileLeft = "/apps/workspaces/kiste_data/stereo/5/left.png";
			fileRight = "/apps/workspaces/kiste_data/stereo/5/right.png";
			imgLeft = ImageFactory::readPNG(fileLeft);
			imgRight = ImageFactory::readPNG(fileRight);


//			imgLeft = Derivative::getX(imgLeft);
//			imgRight = Derivative::getX(imgRight);

//			Normalize::inplace(imgLeft);
//			Normalize::inplace(imgRight);

			MatchingSAD sad(imgLeft, imgRight, 15);
			Matching matcher;

			Point2i pl1(245,381);	Point2i pr1(176,366);		//pr1 = matcher.refine(sad, pl1, pr1);		// h1 lower left
			Point2i pl2(308,323);	Point2i pr2(312,323);		//pr2 = matcher.refine(sad, pl2, pr2);		// h1 lower right
			Point2i pl3(222,82);	Point2i pr3(246,82);		//pr3 = matcher.refine(sad, pl3, pr3);		// h1 upper right
			Point2i pl4(134,76);	Point2i pr4(101,78);		//pr4 = matcher.refine(sad, pl4, pr4);		// h1 upper left
			Point2i pl5(501,218);	Point2i pr5(416,228);		//pr5 = matcher.refine(sad, pl5, pr5);		// h1 mid left
			Point2i pl6(620,201);	Point2i pr6(625,219);		//pr6 = matcher.refine(sad, pl6, pr6);		// h1 mid right
			Point2i pl7(546,83);	Point2i pr7(570,78);		//pr7 = matcher.refine(sad, pl7, pr7);		// h1 upper right
			Point2i pl8(423,79);	Point2i pr8(378,77);		//pr8 = matcher.refine(sad, pl8, pr8);		// h1 upper left

			Point2i pl9(381,413);	Point2i pr9(319,420);		//pr8 = matcher.refine(sad, pl8, pr8);		// cube1a
			Point2i plA(153,322);	Point2i prA(68,299);		//pr8 = matcher.refine(sad, pl8, pr8);		// cube2
			Point2i plB(348,361);	Point2i prB(294,362);		//pr8 = matcher.refine(sad, pl8, pr8);		// cube1b


//			Point2i pl1(242,219);	Point2i pr1(171,212);		//pr1 = matcher.refine(sad, pl1, pr1);		// h1 lower left
//			Point2i pl2(307,194);	Point2i pr2(311,194);		//pr2 = matcher.refine(sad, pl2, pr2);		// h1 lower right
//			Point2i pl3(222,82);	Point2i pr3(246,82);		//pr3 = matcher.refine(sad, pl3, pr3);		// h1 upper right
//			Point2i pl4(134,76);	Point2i pr4(101,78);		//pr4 = matcher.refine(sad, pl4, pr4);		// h1 upper left
//			Point2i pl5(501,218);	Point2i pr5(416,228);		//pr5 = matcher.refine(sad, pl5, pr5);		// h1 lower left
//			Point2i pl6(620,201);	Point2i pr6(625,219);		//pr6 = matcher.refine(sad, pl6, pr6);		// h1 lower right
//			Point2i pl7(546,83);	Point2i pr7(570,78);		//pr7 = matcher.refine(sad, pl7, pr7);		// h1 upper right
//			Point2i pl8(423,79);	Point2i pr8(378,77);		//pr8 = matcher.refine(sad, pl8, pr8);		// h1 upper left

			fm.addCorrespondence(pl1,	pr1);
			fm.addCorrespondence(pl2,	pr2);
			fm.addCorrespondence(pl3,	pr3);
			fm.addCorrespondence(pl4,	pr4);
			fm.addCorrespondence(pl5,	pr5);
			fm.addCorrespondence(pl6,	pr6);
			fm.addCorrespondence(pl7,	pr7);
			fm.addCorrespondence(pl8,	pr8);
			fm.addCorrespondence(pl9,	pr9);

			fm.addCorrespondence(plA,	prA);
			fm.addCorrespondence(plB,	prB);

			fm.estimate();

		}
Example #7
0
bool
State::add(EventBase *eb)
{
	std::pair<size_t, EventBase *> pr(eb->id(),eb);
	bool res = _map_by_id.insert(pr).second;
	if(res) {
		std::pair<time_t,EventBase *> pr2(eb->expiry(),eb);
		_map_by_time.insert(pr2);
	}
	return res;
}
Example #8
0
static void test2(char const *ex) {
    smt_params params;
    params.m_model = true;
    ast_manager m;
    reg_decl_plugins(m);
    arith_util a(m);
    expr_ref fml = parse_fml(m, ex);
    app_ref_vector vars(m);
    expr_ref_vector lits(m);
    vars.push_back(m.mk_const(symbol("x"), a.mk_real()));
    vars.push_back(m.mk_const(symbol("y"), a.mk_real()));
    vars.push_back(m.mk_const(symbol("z"), a.mk_real()));
    flatten_and(fml, lits);

    smt::context ctx(m, params);
    ctx.push();
    ctx.assert_expr(fml);
    lbool result = ctx.check();
    VERIFY(result == l_true);
    ref<model> md;
    ctx.get_model(md);  
    ctx.pop(1);
    
    std::cout << mk_pp(fml, m) << "\n";

    expr_ref pr1(m), pr2(m), fml2(m);
    expr_ref_vector bound(m);
    ptr_vector<sort> sorts;
    svector<symbol> names;
    for (unsigned i = 0; i < vars.size(); ++i) {
        bound.push_back(vars[i].get());
        names.push_back(vars[i]->get_decl()->get_name());
        sorts.push_back(m.get_sort(vars[i].get()));
    }
    expr_abstract(m, 0, bound.size(), bound.c_ptr(), fml, fml2);
    fml2 = m.mk_exists(bound.size(), sorts.c_ptr(), names.c_ptr(), fml2);
    qe::expr_quant_elim qe(m, params);
    for (unsigned i = 0; i < vars.size(); ++i) {
        VERIFY(qe::arith_project(*md, vars[i].get(), lits));
    }
    pr1 = mk_and(lits);
    qe(m.mk_true(), fml2, pr2);
    std::cout << mk_pp(pr1, m) << "\n";
    std::cout << mk_pp(pr2, m) << "\n";

    expr_ref npr2(m);
    npr2 = m.mk_not(pr2);
    ctx.push();
    ctx.assert_expr(pr1);
    ctx.assert_expr(npr2);
    VERIFY(l_false == ctx.check());
    ctx.pop(1);       
}
bool
is_indel_conflict(const indel_key& ik1,
                  const indel_key& ik2) {

    // add one to the end_pos of all indels to prevent immediately
    // adjacent indels in the final alignments:
    pos_range pr1(ik1.open_pos_range());
    pr1.end_pos++;
    pos_range pr2(ik2.open_pos_range());
    pr2.end_pos++;

    return pr1.is_range_intersect(pr2);
}
Example #10
0
		Garden() {

			fileLeft = getDataFile("stereo1.jpg");		// left image
			fileRight = getDataFile("stereo2.jpg");		// right image
			imgLeft = ImageFactory::readJPEG(fileLeft);
			imgRight = ImageFactory::readJPEG(fileRight);

			MatchingSAD sad(imgLeft, imgRight, 15);
			Matching matcher;

			// image1				// image2 (left of image1)	// refine the approximate matching positions
			Point2i pl1(85,53);		Point2i pr1(29,57);			pr1 = matcher.refine(sad, pl1, pr1);
			Point2i pl2(264,34);	Point2i pr2(209,36);		pr2 = matcher.refine(sad, pl2, pr2);
			Point2i pl3(362,32);	Point2i pr3(306,32);		pr3 = matcher.refine(sad, pl3, pr3);

			Point2i pl4(213,155);	Point2i pr4(155,159);		pr4 = matcher.refine(sad, pl4, pr4);

			Point2i pl5(96,209);	Point2i pr5(36,210);		pr5 = matcher.refine(sad, pl5, pr5);
			Point2i pl6(330,212);	Point2i pr6(269,211);		pr6 = matcher.refine(sad, pl6, pr6);
			Point2i pl7(276,241);	Point2i pr7(216,242);		pr7 = matcher.refine(sad, pl7, pr7);

			Point2i pl8(385,332);	Point2i pr8(321,328);		pr8 = matcher.refine(sad, pl8, pr8);
			Point2i pl9(180,389);	Point2i pr9(114,388);		pr9 = matcher.refine(sad, pl9, pr9);
			Point2i pl10(136,500);	Point2i pr10(67,500);		pr10 = matcher.refine(sad, pl10, pr10);

			fm.addCorrespondence(pl1,	pr1);
			fm.addCorrespondence(pl2,	pr2);
			fm.addCorrespondence(pl3,	pr3);

			fm.addCorrespondence(pl4,	pr4);

			fm.addCorrespondence(pl5,	pr5);
			fm.addCorrespondence(pl6,	pr6);
			fm.addCorrespondence(pl7,	pr7);
			fm.addCorrespondence(pl8,	pr8);
//			fm.addCorrespondence(pl9,	pr9);
//			fm.addCorrespondence(pl10,	pr10);

			fm.estimate();

		}
Example #11
0
static int value_set(struct bt_ctf_field_type *type,
		     struct bt_ctf_event *event,
		     const char *name, u64 val)
{
	struct bt_ctf_field *field;
	bool sign = bt_ctf_field_type_integer_get_signed(type);
	int ret;

	field = bt_ctf_field_create(type);
	if (!field) {
		pr_err("failed to create a field %s\n", name);
		return -1;
	}

	if (sign) {
		ret = bt_ctf_field_signed_integer_set_value(field, val);
		if (ret) {
			pr_err("failed to set field value %s\n", name);
			goto err;
		}
	} else {
		ret = bt_ctf_field_unsigned_integer_set_value(field, val);
		if (ret) {
			pr_err("failed to set field value %s\n", name);
			goto err;
		}
	}

	ret = bt_ctf_event_set_payload(event, name, field);
	if (ret) {
		pr_err("failed to set payload %s\n", name);
		goto err;
	}

	pr2("  SET [%s = %" PRIu64 "]\n", name, val);

err:
	bt_ctf_field_put(field);
	return ret;
}
int main(int argc, const char** argv) {
  std::unique_ptr<Shape> pr1(new Rectangle);
  std::unique_ptr<Shape> pr2(new Rectangle);
  std::unique_ptr<Shape> pe1(new Ellipse);
  std::unique_ptr<Shape> pe2(new Ellipse);
  std::unique_ptr<Shape> pt(new Triangle);

  std::cout << "Dynamic type dispatch\n";

  LOG(pr1->Intersect(pe1.get()));
  LOG(pe1->Intersect(pr1.get()));
  LOG(pr1->Intersect(pr2.get()));

  // Here the dispatch is routed to Shape, since Ellipse doesn't define
  // intersections with ellipses.
  LOG(pe1->Intersect(pe2.get()));

  // Since Rectangle and Triangle don't define intersection ops with each other,
  // these calls are routed to Shape.
  LOG(pr1->Intersect(pt.get()));
  LOG(pt->Intersect(pr1.get()));

  return 0;
}
Malla* GeneraFromArchivosXYZU::aplicar() {
	int n_triangulos = 0, n_cuadrilateros = 0; // cantidad de caras de tres y cuatro lados
	//Lineas necesarias para que scanf lea archivo en computadores seteados en otro lenguaje.
	setlocale(LC_NUMERIC, "POSIX");

    FILE *arch_x = fopen(archivo_x.c_str(),"r");
    FILE *arch_y = fopen(archivo_y.c_str(),"r");
    FILE *arch_z = fopen(archivo_z.c_str(),"r");
    FILE *arch_u = fopen(archivo_u.c_str(),"r");

    char line[50];
    char cx[16];
    char cy[16];
    char cz[16];
    int num_puntos, num_caras;
    float x,y,z,nx,ny,nz,u;
    fscanf(arch_x,"%s %s\n",line,line);
    fscanf(arch_y,"%s %s\n",line,line);
    fscanf(arch_z,"%s %s\n",line,line);
    fscanf(arch_u,"%s %s\n",line,line);

    num_puntos=0;
    Nodos *nodos = new Nodos();
    Nodo *nodo;
    while(true) {
        fscanf(arch_x,"%s %s %s\n",cx,cy,cz);
        fscanf(arch_y,"%s %s %s\n",cx,cy,cz);
        fscanf(arch_z,"%s %s %s\n",cx,cy,cz);
        fscanf(arch_u,"%s %s %s\n",cx,cy,cz);
        if(strcmp(cx,"%") == 0) {
            break;
        }
        sscanf(cx,"%f",&x);
        sscanf(cy,"%f",&y);
        sscanf(cz,"%f",&z);
        nodo = new Nodo(Punto(x,y,z));
        nodos->addNodo(nodo);
        num_puntos++;

    }

    map<pair<int,int>,int> ind_arcos;
    map<pair<int,int>,int>::iterator iter1;
	map<pair<int,int>,int>::iterator iter2;
    vector<int> indice_puntos;
    vector<int> indice_arcos;
    Arcos *arcos = new Arcos();
    Caras *caras = new Caras();
    Cara *c;
    int indice;
    char *token;

    int indices[4];
    int n_lados;
    num_caras=0;
    while(true) {
        fgets(line, 50, arch_x);
        fgets(line, 50, arch_y);
        fgets(line, 50, arch_z);
        fgets(line, 50, arch_u);
        if(strpbrk("%",line) != NULL) {
            break;
        }
        token = strtok(line," ");
        for(int i=0; i<3; ++i) {
            sscanf(token,"%d",&indices[i]);
            token = strtok(NULL, " ");
        }
        if(token == NULL) { // Caso triángulos
        	n_triangulos++;
            n_lados = 3;
        }
        else { // Caso cuadriláteros
            sscanf(token,"%d",&indices[3]);
            n_cuadrilateros++;
            n_lados = 4;
        }

        //Nota: Por bug en los archivos de entrada, debo invertir el orden para que las normales queden bien.
        //for(int i=n_lados-1; i>=0; --i) // invertido por bug archivo entrada
        for(int i=0; i<n_lados; ++i) // así debiera ser
            indice_puntos.push_back(indices[i]-1);

        for(int j=0; j<n_lados; j++) {
            int ind1 = indice_puntos[j];
            int ind2 = indice_puntos[int(fmod(j+1,n_lados))];
            pair<int,int> pr1(ind1,ind2);
            pair<int,int> pr2(ind2,ind1);
            iter1 = ind_arcos.find(pr1);
			iter2 = ind_arcos.find(pr2);
            if(iter1 != ind_arcos.end())
                indice_arcos.push_back(iter1->second);
			else if(iter2 != ind_arcos.end())
                indice_arcos.push_back(iter2->second);
            else {
                indice = arcos->addArco(new Arco(ind1,ind2));
                indice_arcos.push_back(indice);
                ind_arcos.insert(make_pair(pr1,indice));
                nodos->addArcoNodo(ind1,indice);
                nodos->addArcoNodo(ind2,indice);
            }
        }
        if(n_lados == 3)
            c = new Triangulo(indice_puntos,indice_arcos);
        else // n_lados == 4
            c = new Cuadrilatero(indice_puntos,indice_arcos);
        int ind_cara = caras->addCara(c);
        num_caras++;
        for(int j=0; j<n_lados; j++) {
            arcos->setCaraArco(indice_arcos[j],ind_cara);
            nodos->addCaraNodo(indice_puntos[j],ind_cara);
        }
        indice_puntos.clear();
        indice_arcos.clear();
    }

    float max_concentracion = 0;
    float min_concentracion = 999999999;
    for(int i=0; i<num_puntos; i++) {
        fscanf(arch_x,"%f\n",&nx);
        fscanf(arch_y,"%f\n",&ny);
        fscanf(arch_z,"%f\n",&nz);
        fscanf(arch_u,"%f\n",&u);

        if(u < min_concentracion) {
            min_concentracion = u;
        }
        if(u > max_concentracion) {
            max_concentracion = u;
        }

        Vect normal = Vect(nx,ny,nz);
        nodos->getNodo(i)->setNormal(normal);
        nodos->getNodo(i)->setConcentracion(u);
    }

    cout << "max_concentracion = " << max_concentracion << endl;
    cout << "min_concentracion = " << min_concentracion << endl;

    Malla *malla = 0;
    if(n_cuadrilateros == 0)
    	malla = new MallaTriangulos(nodos,arcos,caras);
	else if(n_triangulos == 0)
		malla = new MallaCuadrilateros(nodos,arcos,caras);
	else
		malla = new Malla(nodos,arcos,caras);
    malla->setConcentracionMax(max_concentracion);
    malla->setConcentracionMin(min_concentracion);

	fclose(arch_x);
	fclose(arch_y);
	fclose(arch_z);
	fclose(arch_u);
	setlocale(LC_NUMERIC, "");

	//Chequeamos consistencia topologica.
	int V=malla->getNumNodos();
	int E=malla->getNumArcos();
	int F=malla->getNumCaras();
	cout << "Numero de nodos=" << V << endl;
	cout << "Numero de arcos=" << E << endl;
	cout << "Numero de caras=" << F << endl;
	if (V-E+F==2 || V-E+F==0)
		cout << "La malla es consistente. Cumple la formula de Euler: V-E+F=2" << endl;
	else
		cout << "Atencion, la malla no es consistente. No cumple la formula de Euler: V(" << V << ")-E(" << E << "+F("<< F << ")=" << V-E+F << " y deberia ser V-E+F=2" << endl;

    assert(malla->checkMalla(true) >= 0);
    return malla;

}
Example #14
0
Malla* GeneraFromComsol_1::aplicar() {
	int n_triangulos = 0, n_cuadrilateros = 0; // cantidad de caras de tres y cuatro lados
	ifstream in(archivo.c_str());
	char line[MAXLINE];
	in.getline(line,MAXLINE);

    string cx,cy,cz;
	float x,y,z;

    int num_puntos, num_caras;

    num_puntos=0;
    Nodos *nodos = new Nodos();
    Nodo *nodo;

    while(true) {
        in.getline(line,MAXLINE);
		stringstream streamin(line);
		if (line[0]=='%')
			break;

		streamin >> x;
		streamin >> y;
		streamin >> z;

        nodo = new Nodo(Punto(x,y,z));
        nodos->addNodo(nodo);
        num_puntos++;
    }


    map<pair<int,int>,int> ind_arcos;
    map<pair<int,int>,int>::iterator iter1;
	map<pair<int,int>,int>::iterator iter2;
    vector<int> indice_puntos;
    vector<int> indice_arcos;
    Arcos *arcos = new Arcos();
    Caras *caras = new Caras();
    Cara *c;
    int indice;

    int indices[4], n_lados;
    num_caras=0;
    while(true) {
        indices[3]=-1;
		in.getline(line,MAXLINE);
		if (in.fail() || line[0]=='%')
            break;
		stringstream streamin(line);
		for(int i=0; i<4; i++)
            streamin >> indices[i];

        if(indices[3] == -1) {
        	n_triangulos++;
            n_lados = 3;
        }
        else {
        	n_cuadrilateros++;
            n_lados = 4;
        }

        //Nota: Por bug en los archivos de entrada, debo invertir el orden para que las normales queden bien.
        //for(int i=n_lados-1; i>=0; i--) // por el bug
        for(int i=0; i<n_lados; i++) // así debiera ser
            indice_puntos.push_back(indices[i]-1);

        for(int j=0; j<n_lados; j++) {
            int ind1 = indice_puntos[j];
            int ind2 = indice_puntos[int(fmod(j+1,n_lados))];
            pair<int,int> pr1(ind1,ind2);
			pair<int,int> pr2(ind2,ind1);
            iter1 = ind_arcos.find(pr1);
			iter2 = ind_arcos.find(pr2);
            if(iter1 != ind_arcos.end())
                indice_arcos.push_back(iter1->second);
            else if(iter2 != ind_arcos.end())
                indice_arcos.push_back(iter2->second);
            else {
                indice = arcos->addArco(new Arco(ind1,ind2));
                indice_arcos.push_back(indice);
                ind_arcos.insert(make_pair(pr1,indice));
                nodos->addArcoNodo(ind1,indice);
                nodos->addArcoNodo(ind2,indice);
            }
        }
        if(n_lados == 3)
            c = new Triangulo(indice_puntos,indice_arcos);
        else if(n_lados == 4)
            c = new Cuadrilatero(indice_puntos,indice_arcos);
        else
            c = new Cara(indice_puntos,indice_arcos);

        int ind_cara = caras->addCara(c);
        num_caras++;
        for(int j=0; j<n_lados; j++) {
            arcos->setCaraArco(indice_arcos[j],ind_cara);
            nodos->addCaraNodo(indice_puntos[j],ind_cara);
        }
        indice_puntos.clear();
        indice_arcos.clear();
    }

	Malla *malla = 0;
    if(n_cuadrilateros == 0)
    	malla = new MallaTriangulos(nodos,arcos,caras);
	else if(n_triangulos == 0)
		malla = new MallaCuadrilateros(nodos,arcos,caras);
	else
		malla = new Malla(nodos,arcos,caras);
	malla->setConcentracionTodos(1.0);
    malla->setConcentracionMax(1.0);
    malla->setConcentracionMin(0.0);
    malla->setNormales();

	in.close();

	//Chequeamos consistencia topologica.
	int V=malla->getNumNodos();
	int E=malla->getNumArcos();
	int F=malla->getNumCaras();
	cout << "Numero de nodos=" << V << endl;
	cout << "Numero de arcos=" << E << endl;
	cout << "Numero de caras=" << F << endl;
	if (V-E+F==2 || V-E+F==0)
		cout << "La malla es consistente. Cumple la formula de Euler: V-E+F=2" << endl;
	else
		cout << "Atencion, la malla no es consistente. No cumple la formula de Euler: V-E+F=" << V-E+F << " y deberia ser V-E+F=2" << endl;

    assert(malla->checkMalla(true) >= 0);
    cout << endl;
    return malla;
}
int main()
{
    Prueba pr0;

    mtk::Signal<> mySignal;

    std::cout << std::endl << "una conexión a uno     Tres conexiones a 2, mandamos un signal" << std::endl;
    mySignal.connect(&pr0, &Prueba::Recibio);
    mySignal.connect(&pr0, &Prueba::Recibio2);
    mySignal.connect(&pr0, &Prueba::Recibio2);
    mySignal.connect(&pr0, &Prueba::Recibio2);
    mySignal.emit();




    std::cout << std::endl << "Desconectamos un 2" << std::endl;
    bool result = mySignal.disconnect(&pr0, &Prueba::Recibio2);
    if (result)
        std::cout << std::endl << "Desconectamos un 2  OK" << std::endl;
    else
        std::cout << std::endl << "Desconectamos un 2  FAIL" << std::endl;
    mySignal.emit();


    std::cout << std::endl << "Desconectamos un 1" << std::endl;
    result = mySignal.disconnect(&pr0, &Prueba::Recibio);
    if (result)
        std::cout << std::endl << "Desconectamos un 1  OK" << std::endl;
    else
        std::cout << std::endl << "Desconectamos un 1  FAIL" << std::endl;
    mySignal.emit();


    std::cout << std::endl << "Desconectamos un 1" << std::endl;
    result = mySignal.disconnect(&pr0, &Prueba::Recibio);
    if (result)
        std::cout << std::endl << "Desconectamos un 1  OK" << std::endl;
    else
        std::cout << std::endl << "Desconectamos un 1  FAIL" << std::endl;
    mySignal();



    std::cout << std::endl << "desconectamos todo... y mandamos un mensaje nuevo";
    mySignal.disconnect_all();
    mySignal();



    //  pendiente la copia de signal
    //  falta meter el countPtr
//    Signal<> mySignal2;
//    mySignal2 = mySignal;

    //  pendiente que se desconecte cuando el receptor salga de ámbito
    //  delicado
    Prueba pr6(22);
    mySignal.connect(&pr6, &Prueba::Recibio);

    std::cout << std::endl << "Creamos otro recpetor temporal, conectamos a 1 mandamo señal";
    {
        Prueba pr1(23);

        mySignal.connect(&pr1, &Prueba::Recibio);
        mySignal();

    }
    std::cout << std::endl << "el últmo receptor temporal sale de ámbito";
    Prueba pr2(24);
    mySignal.connect(&pr2, &Prueba::Recibio);
    std::cout << std::endl << "acceso incorrecto a la memoria";
    std::cout << std::endl << "Sólo se debería escribir 1";
    mySignal();





    //mtk::Signal<> mySignal;
    //std::cout << std::endl << "Creamos un temporal 777 que sale de ámbito antes de poner mandar nada";

    {
        Prueba pr1(77);

        mySignal.connect(&pr1, &Prueba::Recibio);
        mySignal.connect(&pr1, &Prueba::Recibio);
        mySignal.emit();

    }
    Prueba pr22(88);
    mySignal.connect(&pr22, &Prueba::Recibio);
    mySignal();

    mySignal.disconnect(&pr22, &Prueba::Recibio);
    mySignal();



    Prueba2 prueba2;
    prueba2.Connect();
    prueba2.Signal();


    {
        //  conectamos dos signal al mismo receptor
        //  sacamos de ámbito a dicho receptor
        //  mandamos una signal
        //  tiene que recibirse
        //  esto generaba un error antes del 5 de julio de 2010

        Prueba pr;
        mtk::Signal<>  signalpr1;
        mtk::Signal<>  signalpr2;

        signalpr1.connect(&pr, &Prueba::Recibio);
        signalpr2.connect(&pr, &Prueba::Recibio);
        signalpr1.disconnect(&pr, &Prueba::Recibio);
        std::cout << "SE TIENE QUE RECIBIR..."  << std::endl;
        signalpr2.emit();
    }


    return 0;
}