Example #1
0
inline ExPolygons to_expolygons(const Surfaces &src)
{
    ExPolygons expolygons;
    expolygons.reserve(src.size());
    for (Surfaces::const_iterator it = src.begin(); it != src.end(); ++it)
        expolygons.push_back(it->expolygon);
    return expolygons;
}
Example #2
0
double CalcIntegral(Surfaces &s, PointsXYZ &m){
//return;
	int ns=s.size(); // число треугольников
    CoordXYZ x[3];

    for (int i = 0; i < 3; i++)
        x[i].resize(3);

//============= init ===================

    vrt.Init(m.size(),p_DeltaT);

	CoordXYZ w(3);
	CoordXYZ control_point(3);
	CoordXYZ position_of_source(3);

	w[0] = 0;
	w[1] = 0;
	w[2] = 0;

	position_of_source[0] = e_x0;
	position_of_source[1] = e_y0;
	position_of_source[2] = e_z0;

	control_point[0] = p_control_x;
	control_point[1] = p_control_y;
	control_point[2] = p_control_z;

	double omega = p_omega;

	SourceOfNoise source_of_noise(omega, position_of_source,w);//,control_point);

//========== end of init ===============


    double Sintegral;

//  for(double z=90.;z<100.;z+=(100.-90.)/200.)
    double T=0.;
//    for(;T<110.;T+=(110.-90.)/230.)
    {
    for (int i = 0; i < 3; ++i)
        IntN[i]=0;
        S_Surf=0.;

//     control_point[2]=z;

       Sintegral=0;

       for(int j=0;j<ns;j++)
       {
            int err;

            Sintegral+=CalcIntegralOfFullTrg(s[j],m,T,source_of_noise, control_point,err);

            if(err)
            {
                cout << " ERROR 3_ ret=" << err << " j= " << j << endl;
                return 0.;
            }
       }

        {
         static int ugu=0;
         if(!ugu)   cout << " S_Surf=" << S_Surf << " (" <<  S_Surf/(4.*M_PI*kva(p_Rsphere)) << ") IntN " << IntN[0] << " " << IntN[1] << " " << IntN[2] << endl<< endl;
         ugu=1;
        }

//        cout << control_point[2] << " " << Sintegral << " " << source_of_noise.GetRho(control_point,T) << endl;
       if(!isbp)
          cout << T << "\t" << source_of_noise.GetRho(control_point,T) << " " << Sintegral << endl;

    }

       if(isbp)
       {
         vrt.PutData("koeff.txt");

         // следует выполнить свёртку!

         int nk=150,ik;
         double dt=(p_T2-p_T1)/nk;

         for(ik=0,T=p_T1;ik<=nk;ik++,T+=dt)
            {
            Sintegral=vrt.Svertka(s,m,source_of_noise,T);
            cout << T  << "\t" << source_of_noise.GetRho(control_point,T) << " " << Sintegral << endl;
            }
       }

    cout << endl;
    cout  << " S_Surf=" << S_Surf << " (" <<  S_Surf/(4.*M_PI*kva(p_Rsphere)) << ") Int_N " << IntN[0] << " " << IntN[1] << " " << IntN[2] << endl;

    return Sintegral;
}
Example #3
0
File: graph.cpp Project: LK4D4/IPM
vector<SimplifiedRib> CreateInitialStructure(Surfaces& s, PointsXYZ &m){
	vector<Rib> k;
	k.resize(s.size()*3);
	//cout << s.size() << " " << k.size() << endl;
	for(int i = 0; i < s.size(); i++){ // заполняем k ребрами с номерами треугольников
		k[i*3].TriangleNumber = k[i*3+1].TriangleNumber = k[i*3+2].TriangleNumber = i;
		k[i*3].a = k[i*3+1].a = GetCoordSurf(s[i][0],m);
		k[i*3].b = k[i*3+2].a = GetCoordSurf(s[i][1],m);
		k[i*3+1].b = k[i*3+2].b = GetCoordSurf(s[i][2],m);
	}
	
	for(int i = 0; i < k.size(); i++){ //упорядочиваем вершины каждого ребра по величине модуля
		CoordXYZ t;
	/*	cout << i << endl;
		cout << "a: " << k[i].a[0] << " " << k[i].a[1] << " "<< k[i].a[2] << " ";
		cout << "b: " << k[i].b[0] << " " << k[i].b[1] << " "<< k[i].b[2] << endl;
		if(!((i+1)%3)) cout << k[i].TriangleNumber << endl;*/
		if(keisu(k[i].a) > keisu(k[i].b)) {
			t = k[i].a;
			k[i].a = k[i].b;
			k[i].b = t;
		}
	}
	
	qsortmy1(k,0,k.size()-1,0);
	int lb = 0;
	int rb = 0;
	for(int i = 1; i < k.size(); i++){
		
		if(k[i].a[0] != k[i-1].a[0]){
			rb = i-1;
			qsortmy1(k,lb,rb,1);
			lb = i;
		}
		else if(i == k.size()-1){
			rb = i;
			qsortmy1(k,lb,rb,1);
		}
	}
	
	lb = rb = 0;
	for(int i = 1; i < k.size(); i++){
		if(k[i].a[0] != k[i-1].a[0] || k[i].a[1] != k[i-1].a[1]){
			rb = i-1;
			qsortmy1(k,lb,rb,2);
			lb = i;
		}
		else if(i == k.size()-1){
			rb = i;
			qsortmy1(k,lb,rb,2);
		}
	}

	lb = rb = 0;
	for(int i = 1; i < k.size(); i++){
		if(k[i].a[0] != k[i-1].a[0] || k[i].a[1] != k[i-1].a[1] || k[i].a[2] != k[i-1].a[2]){
			rb = i-1;
			qsortmy2(k,lb,rb,0);
			lb = i;
		}
		else if(i == k.size()-1){
			rb = i;
			qsortmy2(k,lb,rb,0);
		}
	}
	
	lb = rb = 0;
	for(int i = 1; i < k.size(); i++){
		if(k[i].a[0] != k[i-1].a[0] || k[i].a[1] != k[i-1].a[1] || k[i].a[2] != k[i-1].a[2] || k[i].b[0] != k[i-1].b[0]){
			rb = i-1;
			qsortmy2(k,lb,rb,1);
			lb = i;
		}
		else if(i == k.size()-1){
			rb = i;
			qsortmy2(k,lb,rb,1);
		}
	}
	
	lb = rb = 0;
	for(int i = 1; i < k.size(); i++){
		if(k[i].a[0] != k[i-1].a[0] || k[i].a[1] != k[i-1].a[1] || k[i].a[2] != k[i-1].a[2] || k[i].b[0] != k[i-1].b[0] || k[i].b[1] != k[i-1].b[1]){
			rb = i-1;
			qsortmy2(k,lb,rb,2);
			lb = i;
		}
		else if(i == k.size()-1){
			rb = i;
			qsortmy2(k,lb,rb,2);
		}
	}

	//qsorttriangletest(k,0,k.size()-1);
	/*for(int i = 0; i < k.size();i++){
		if(k[i].TriangleNumber == 3779){
		cout << i << " " << k[i].TriangleNumber << endl;
		cout << "a: " << k[i].a[0] << " " << k[i].a[1] << " "<< k[i].a[2] << " ";
		cout << "b: " << k[i].b[0] << " " << k[i].b[1] << " "<< k[i].b[2] << endl;
		}
	}*/
	vector<SimplifiedRib> ret;
	ret.resize(k.size());
	ret[0].RibNumber = 0; ret[0].TriangleNumber = k[0].TriangleNumber;
	int z = 0;
	for(int i = 1; i < k.size(); i++){
		if(k[i].a != k[i-1].a || k[i].b != k[i-1].b) z++;
		ret[i].RibNumber = z; ret[i].TriangleNumber = k[i].TriangleNumber;
	}
	//qsorttriangle(ret,0,ret.size()-1);
	/*for(int i = 0; i < ret.size(); i++){
		if(ret[i].RibNumber == 6805){
		cout << i << " ";
		cout << "RibNumber: " << ret[i].RibNumber << " ";
		cout << "TriangleNumber: " << ret[i].TriangleNumber << endl;
		}
	}*/
	return ret;
}