Ejemplo n.º 1
0
/***************************CoordinateRotation********************
* For a PointA, Given the Coordinates of 2 points(axisA, axisB) 
* in line of Rotation Axis and the Rotation Angle 
* Generate the coordinate of PointB after operation
* Author: C.Y.
* Date 2006.12.2.  
*
*****************************END**********************************/
bool CoordinateRotation(const myvector &pointA, const myvector &axisA, const myvector &axisB, double angle, myvector &pointB)
{
   if(pointA.size()!=3 || axisA.size()!=3 || axisB.size()!=3)
   {
      cout<<"Error in CoordinateRotation()"<<endl;
      return false;
   }
   
   myvector axis(3, 0);
   axis[0]=axisB[0]-axisA[0]; 
   axis[1]=axisB[1]-axisA[1];
   axis[2]=axisB[2]-axisA[2]; 
   
   matrix rotmtx;
   if(!RotationMatrix(axis, deg2rad(angle), rotmtx)) return false;
   
   myvector point_A(3, 0);
   point_A[0]=pointA[0]-axisA[0];
   point_A[1]=pointA[1]-axisA[1];
   point_A[2]=pointA[2]-axisA[2];
   
   point_A.push_back(1);
   if(!MatrixTimesTransVector(rotmtx, point_A, pointB))
   { 
      point_A.pop_back(); 
      return false;
   }
   point_A.pop_back(); pointB.pop_back();
   
   pointB[0]+=axisA[0];
   pointB[1]+=axisA[1];
   pointB[2]+=axisA[2];
   
   return true;
}
Ejemplo n.º 2
0
inline bool MatrixTimesTransVector(const matrix &mtx, const myvector &tvt, myvector &vct)
{
   if(mtx[0].size()!=tvt.size())
   {
      cout<<"Error in MatrixTimesTransVector()"<<endl;
      return false;
   }
   int i=0, j=0;
   vct.assign(mtx.size(), 0);
   for(i=0; i<mtx.size(); ++i)
      for(j=0; j<mtx[i].size(); ++j)
         vct[i]+=mtx[i][j]*tvt[j];
   
   return true;
}
Ejemplo n.º 3
0
double sqrtn(int i)
// return sqrt(i)
{
  static myvector<double> f(10);
  static bool first=true;
  if (first) {
    for(uint j=0;j<10;j++) f[j] = sqrt((double)j);
    first = false;
  }
  if (i>=(int)f.size())
    for(int j=f.size();j<=i;j++)
      f.push_back(sqrt((double)j));
  Assert(i<(int)f.size());
  return f[i];
}
Ejemplo n.º 4
0
double sqrtfact(int i)
// return sqrt(i!)
{
  static myvector<double> f(10);
  static bool first=true;
  if (first) {
    f[0] = f[1] = 1.;
    for(uint j=2;j<10;j++) f[j] = f[j-1]*sqrt((double)j);
    first = false;
  }
  if (i>=(int)f.size())
    for(int j=f.size();j<=i;j++)
      f.push_back(f[j-1]*sqrt((double)j));
  Assert(i<(int)f.size());
  return f[i];
}
Ejemplo n.º 5
0
void serialize_interleaver(std::ostream& sout, myvector<int> lut, int tau,
      int spread, libbase::int32u seed, double elapsed)
   {
   sout << "#% Size: " << tau << std::endl;
   sout << "#% Spread: " << spread << std::endl;
   sout << "#% Seed: " << seed << std::endl;
   sout << "# Date: " << libbase::timer::date() << std::endl;
   sout << "# Time taken: " << libbase::timer::format(elapsed) << std::endl;
   lut.serialize(sout);
   }
Ejemplo n.º 6
0
double fact(int i)
// return i!
{
  Assert(i>=0);
  static myvector<double> f(10);
  static bool first=true;
  if (first) {
    f[0] = f[1] = 1.;
    for(uint j=2;j<10;j++) f[j] = f[j-1]*(double)j;
    first = false;
  }
  if (i>=(int)f.size()) {
    for(int j=f.size();j<=i;j++)
      f.push_back(f[j-1]*(double)j);
    Assert(i==(int)f.size()-1);
  }
  Assert(i<(int)f.size());
  return f[i];
}
Ejemplo n.º 7
0
inline bool Norm2Vector(const myvector &c, myvector &cc)
{
   if(c.size()!=cc.size())
   {
      cout<<"Error in Norm2Vector() "<<endl;
      return false;
   }
   int i=0; 
   double len=0;
   for(i=0; i<c.size(); ++i)
   {
      len+=c[i]*c[i];
   }
   len=sqrt(len);
   if(len<EXTRA) return false;
   for(i=0; i<c.size(); ++i)
      cc[i]=c[i]/len;
   
   return true;
   
}
Ejemplo n.º 8
0
double binom(int i,int j)
// return iCj, i!/(j!(i-j)!)
{
  static myvector<myvector<double> > f(10);
  static bool first=true;
  if (first) {
    f[0] = myvector<double>(1,1.);
    f[1] = myvector<double>(2,1.);
    for(int i1=2;i1<10;i1++) {
      f[i1] = myvector<double>(i1+1);
      f[i1][0] = f[i1][i1] = 1.;
      for(int j1=1;j1<i1;j1++) f[i1][j1] = f[i1-1][j1-1] + f[i1-1][j1];
    }
    first = false;
  }
  if (j<0 || j>i) return 0.;
  if (i>=(int)f.size()) {
    for(int i1=f.size();i1<=i;i1++) {
      f.push_back(myvector<double>(i1+1,1.));
      for(int j1=1;j1<i1;j1++) f[i1][j1] = f[i1-1][j1-1] + f[i1-1][j1];
    }
    Assert(i==(int)f.size()-1);
  }
  Assert(i<(int)f.size());
  Assert(j<(int)f[i].size());
  return f[i][j];
}
Ejemplo n.º 9
0
/************************Rotation Matrix****************************
* Give the Rotation Axis and the Rotation Angle
* Generate the Rotation Matrix
* Author: C.Y.
* Date 2006.11.30.
*************************End***************************************/
inline bool RotationMatrix(const myvector &axis, double angle, matrix &romtx)
{
   if(axis.size()!=3) 
   {
      cout<<"Error 1 in RotationMatrix()"<<endl;
      return false;
   }
   myvector ouc(3, 0);
   if(!Norm2Vector(axis, ouc)) 
   {
      cout<<"Error 2 in RotationMatrix()"<<endl;
      return false;
   }
   int i=0, j=0;
   matrix su, u_i, unit, tmp;
   
   SetMatrix(su, 3, 3);
   su[0][0]=0; su[0][1]=-ouc[2]; su[0][2]=ouc[1]; 
   su[1][0]=ouc[2]; su[1][1]=0; su[1][2]=-ouc[0]; 
   su[2][0]=-ouc[1]; su[2][1]=ouc[0]; su[2][2]=0;
   RealTimesMatrix(sin(angle), su, su);
   TransVectorTimesVector(ouc, ouc, u_i);
   
   SetMatrix(unit, 3, 3);
   SetMatrix(tmp, 3, 3);
   unit[0][0]=1; unit[1][1]=1; unit[2][2]=1;
   RealTimesMatrix(-1, u_i, tmp);
   MatrixAddMatrix(unit, tmp, tmp);
   RealTimesMatrix(cos(angle), tmp, tmp); 
   
   MatrixAddMatrix(u_i, tmp, tmp);
   MatrixAddMatrix(su, tmp, tmp);
   
   SetMatrix(romtx, 4, 4);
   for(i=0; i<tmp.size(); ++i)
      for(j=0; j<tmp[i].size(); ++j)
         romtx[i][j]=tmp[i][j];
   romtx[0][3]=0; romtx[1][3]=0; romtx[2][3]=0; 
   romtx[3][0]=0; romtx[3][1]=0; romtx[3][2]=0; 
   romtx[3][3]=1;
   
   return true;
}
Ejemplo n.º 10
0
inline bool TransVectorTimesVector(const myvector &trans, const myvector &vctor, matrix &mtx)
{
   if(trans.size()!=vctor.size())
   {
      cout<<"Error in TransVectorTimesVector()"<<endl;
      return false;
   }
   int i=0, j=0;
   SetMatrix(mtx, trans.size(), vctor.size());
   for(i=0; i<trans.size(); ++i)
      for(j=0; j<vctor.size(); ++j)
         mtx[i][j]=trans[i]*vctor[j];
   
   return true;
}
Ejemplo n.º 11
0
void main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	myvector<int> a(arr, 10);
	myvector<int> b(a);
	myvector<char*> c;
	cout << "This is a test example!" << endl;
	try
	{
		myvector<int> d;
		d = a;
		for (int i = 0; i<d.size(); i++)
			cout << d[i] << " ";
		cout << endl;
		myvector<int> e(a+b);
		for (int i = 0; i<e.size(); i++)
			cout << e[i] << " ";
		cout << endl;
		for (int i = 11; i<28; i++)
			b.push_back(i);
		cout << b[5];
		cout << endl;
		for (int i = 0; i<b.size(); i++)
			cout << b[i] << " ";
		cout << endl;
		b.insert(2, 1000);
		cout << b.capacity() << endl;
		for (int i = 0; i<b.size(); i++)
			cout << b[i] << " ";
		cout << endl;
		b.erase(2);
		for (int i = 0; i<b.size(); i++)
			cout << b[i] << " ";
		cout << endl;
		b.erase(2,5);
		for (int i = 0; i<b.size(); i++)
			cout << b[i] << " ";
		cout << endl;
		b.assign(10, 1);
		for (int i = 0; i<b.size(); i++)
			cout << b[i] << " ";
		cout << endl;
		cout << b.size();
		cout << endl;
		a.resize(15);
		while (!a.empty())
			cout << a.pop_back() << " ";
		cout << endl;
		while (!b.empty())
			cout << b.pop_back() << " ";
		cout << endl;
		b.clear();
		while (!b.empty())
			cout << b.pop_back() << " ";
		cout << endl;
		c.push_back("Why Always Me!");
		c.push_back("Because You Are Stupid!");
		for (int i = 0; i < c.size(); i++)
			cout << c[i] << endl;
		myvector<int> x;
		x.resize(2);
		x[0] = 10;
		for (int i = 0; i<x.size(); i++)
			cout << x[i] << " ";
		cout << endl;
		myvector<int> const y = x;
		for (int i = 0; i<x.size(); i++)
			cout << x[i] << " ";
		cout << endl;
		int const z = y.at(0);
		cout << z << endl;
	}
	catch (exception out_of_range)
	{
		cout << "Out of Range! End Processing!" << endl;
	}
	system("pause");
}