当前位置: 首页>>代码示例>>C++>>正文


C++ Vec3d::X方法代码示例

本文整理汇总了C++中Vec3d::X方法的典型用法代码示例。如果您正苦于以下问题:C++ Vec3d::X方法的具体用法?C++ Vec3d::X怎么用?C++ Vec3d::X使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Vec3d的用法示例。


在下文中一共展示了Vec3d::X方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: GetNormal

void Vec3d :: GetNormal (Vec3d & n) const
  {
  if (fabs (X()) > fabs (Z()))
    {
    n.X() = -Y();
    n.Y() = X();
    n.Z() = 0;
    }
  else
    {
    n.X() = 0;
    n.Y() = Z();
    n.Z() = -Y();
    }
  double len = n.Length();
  if (len == 0)
    {
    n.X() = 1;
    n.Y() = n.Z() = 0;
    }
  else
    n /= len;
  }
开发者ID:SeregaGomen,项目名称:qng,代码行数:23,代码来源:geom3d.cpp

示例2: SolveLinearSystemLS

int SolveLinearSystemLS (const Vec3d & col1,
			 const Vec3d & col2,
			 const Vec2d & rhs,
			 Vec3d & sol)
{
  double a11 = col1 * col1;
  double a12 = col1 * col2;
  double a22 = col2 * col2;
  
  double det = a11 * a22 - a12 * a12;

  if (det*det <= 1e-24 * a11 * a22)
    {
      sol = Vec3d (0, 0, 0);
      return 1;
    }
  
  Vec2d invrhs;
  invrhs.X() = ( a22 * rhs.X() - a12 * rhs.Y()) / det;
  invrhs.Y() = (-a12 * rhs.X() + a11 * rhs.Y()) / det;

  sol.X() = invrhs.X() * col1.X() + invrhs.Y() * col2.X();
  sol.Y() = invrhs.X() * col1.Y() + invrhs.Y() * col2.Y();
  sol.Z() = invrhs.X() * col1.Z() + invrhs.Y() * col2.Z();

  return 0;

  /*
  Vec3d inv1, inv2;
  int err = 
    PseudoInverse (col1, col2, inv1, inv2);

   sol = rhs.X() * inv1 + rhs.Y() * inv2;
   return err;
  */
}
开发者ID:SeregaGomen,项目名称:qng,代码行数:36,代码来源:geom3d.cpp

示例3: ist

   // loads geometry from STL file
   DLL_HEADER Ng_STL_Geometry * Ng_STL_LoadGeometry (const char * filename, int binary)
   {
      int i;
      STLGeometry geom;
      STLGeometry* geo;
      ifstream ist(filename);

      if (binary)
      {
         geo = geom.LoadBinary(ist);
      }
      else
      {
         geo = geom.Load(ist);
      }

      readtrias.SetSize(0);
      readedges.SetSize(0);

      Point3d p;
      Vec3d normal;
      double p1[3];
      double p2[3];
      double p3[3];
      double n[3];

      Ng_STL_Geometry * geo2 = Ng_STL_NewGeometry();

      for (i = 1; i <= geo->GetNT(); i++)
      {
         const STLTriangle& t = geo->GetTriangle(i);
         p = geo->GetPoint(t.PNum(1));
         p1[0] = p.X(); p1[1] = p.Y(); p1[2] = p.Z(); 
         p = geo->GetPoint(t.PNum(2));
         p2[0] = p.X(); p2[1] = p.Y(); p2[2] = p.Z(); 
         p = geo->GetPoint(t.PNum(3));
         p3[0] = p.X(); p3[1] = p.Y(); p3[2] = p.Z();
         normal = t.Normal();
         n[0] = normal.X(); n[1] = normal.Y(); n[2] = normal.Z();

         Ng_STL_AddTriangle(geo2, p1, p2, p3, n);
      }

      return geo2;
   }
开发者ID:11235813,项目名称:netgen,代码行数:46,代码来源:nglib.cpp

示例4: loadSTL

STLGeometry* NGInterface::loadSTL(string data)
{
    strstream ist;
    STLGeometry geom,
                *geo;
    Point3d p;
    Vec3d normal;
    double p1[3],
           p2[3],
           p3[3],
           n[3];

    ist << data;
    try
    {
        geo = geom.Load(ist);
    }
    catch (...)
    {
        cerr << "Problem in STL-file!" << endl;
        return NULL;
    }
    if (!geo->GetNT())
    {
        cerr << "Problem in STL-file!" << endl;
        return NULL;
    }
    readtrias.SetSize(0);
    readedges.SetSize(0);
    for (int i = 1; i <= geo->GetNT(); i++)
    {
        const STLTriangle& t = geo->GetTriangle(i);

        p = geo->GetPoint(t.PNum(1));
        p1[0] = p.X(); p1[1] = p.Y(); p1[2] = p.Z();
        p = geo->GetPoint(t.PNum(2));
        p2[0] = p.X(); p2[1] = p.Y(); p2[2] = p.Z();
        p = geo->GetPoint(t.PNum(3));
        p3[0] = p.X(); p3[1] = p.Y(); p3[2] = p.Z();
        normal = t.Normal();
        n[0] = normal.X(); n[1] = normal.Y(); n[2] = normal.Z();
        addTriangleSTL(p1,p2,p3,n);
    }
    return (STLGeometry*)(geometry = geo);
}
开发者ID:SeregaGomen,项目名称:qng,代码行数:45,代码来源:nglib.cpp

示例5: WriteSTLFormat

void WriteSTLFormat (const Mesh & mesh,
                     const string & filename)
{
    cout << "\nWrite STL Surface Mesh" << endl;

    ofstream outfile (filename.c_str());

    int i, j, k;

    outfile.precision(10);

    outfile << "solid" << endl;

    for (i = 1; i <= mesh.GetNSE(); i++)
    {
        outfile << "facet normal ";
        const Point3d& p1 = mesh.Point(mesh.SurfaceElement(i).PNum(1));
        const Point3d& p2 = mesh.Point(mesh.SurfaceElement(i).PNum(2));
        const Point3d& p3 = mesh.Point(mesh.SurfaceElement(i).PNum(3));

        Vec3d normal = Cross(p2-p1,p3-p1);
        if (normal.Length() != 0)
        {
            normal /= (normal.Length());
        }

        outfile << normal.X() << " " << normal.Y() << " " << normal.Z() << "\n";
        outfile << "outer loop\n";

        outfile << "vertex " << p1.X() << " " << p1.Y() << " " << p1.Z() << "\n";
        outfile << "vertex " << p2.X() << " " << p2.Y() << " " << p2.Z() << "\n";
        outfile << "vertex " << p3.X() << " " << p3.Y() << " " << p3.Z() << "\n";

        outfile << "endloop\n";
        outfile << "endfacet\n";
    }
    outfile << "endsolid" << endl;
}
开发者ID:masteroftime,项目名称:viennamesh-dev,代码行数:38,代码来源:writeuser.cpp

示例6: SolveLinearSystem

int SolveLinearSystem (const Vec3d & col1, const Vec3d & col2,
		       const Vec3d & col3, const Vec3d & rhs,
		       Vec3d & sol)
{
  // changed by MW
  double matrix[3][3];
  double locrhs[3];
  int retval = 0;

  for(int i=0; i<3; i++)
    {
      matrix[i][0] = col1.X(i+1);
      matrix[i][1] = col2.X(i+1);
      matrix[i][2] = col3.X(i+1);
      locrhs[i] = rhs.X(i+1);
    }

  for(int i=0; i<2; i++)
    {
      int pivot = i;
      double maxv = fabs(matrix[i][i]);
      for(int j=i+1; j<3; j++)
	if(fabs(matrix[j][i]) > maxv)
	  {
	    maxv = fabs(matrix[j][i]);
	    pivot = j;
	  }

      if(fabs(maxv) > 1e-40)
	{
	  if(pivot != i)
	    {
	      swap(matrix[i][0],matrix[pivot][0]);
	      swap(matrix[i][1],matrix[pivot][1]);
	      swap(matrix[i][2],matrix[pivot][2]);
	      swap(locrhs[i],locrhs[pivot]);
	    }
	  for(int j=i+1; j<3; j++)
	    {
	      double fac = matrix[j][i] / matrix[i][i];
	      
	      for(int k=i+1; k<3; k++)
		matrix[j][k] -= fac*matrix[i][k];
	      locrhs[j] -= fac*locrhs[i];
	    }
	}
      else
	retval = 1;
    }

  if(fabs(matrix[2][2]) < 1e-40)
    retval = 1;

  if(retval != 0)
    return retval;
  

  for(int i=2; i>=0; i--)
    {
      double sum = locrhs[i];
      for(int j=2; j>i; j--)
	sum -= matrix[i][j]*sol.X(j+1);

      sol.X(i+1) = sum/matrix[i][i];
    }

  return 0;
  
  
  


  /*
  double det = Determinant (col1, col2, col3);
  if (fabs (det) < 1e-40)
    return 1;
  
  sol.X() = Determinant (rhs, col2, col3) / det;
  sol.Y() = Determinant (col1, rhs, col3) / det;
  sol.Z() = Determinant (col1, col2, rhs) / det;

  return 0;
  */
  /*
  Vec3d cr;
  Cross (col1, col2, cr);
  double det = cr * col3;

  if (fabs (det) < 1e-40)
    return 1;

  if (fabs(cr.Z()) > 1e-12)
    {
      // solve for 3. component
      sol.Z() = (cr * rhs) / det;
      
      // 2x2 system for 1. and 2. component
      double res1 = rhs.X() - sol.Z() * col3.X();
      double res2 = rhs.Y() - sol.Z() * col3.Y();
      
//.........这里部分代码省略.........
开发者ID:SeregaGomen,项目名称:qng,代码行数:101,代码来源:geom3d.cpp

示例7: Transpose

void Transpose (Vec3d & v1, Vec3d & v2, Vec3d & v3)
{
  Swap (v1.Y(), v2.X());
  Swap (v1.Z(), v3.X());
  Swap (v2.Z(), v3.Y());
}
开发者ID:SeregaGomen,项目名称:qng,代码行数:6,代码来源:geom3d.cpp

示例8: midext

  void GeomSearch3d :: Create()
  {
    INDEX i,j,k;
    if (reset)
      {
	const double hashelemsizefactor = 4;
	reset = 0;
	/*
	  minext=Point3d(MAXDOUBLE, MAXDOUBLE, MAXDOUBLE);
	  maxext=Point3d(MINDOUBLE, MINDOUBLE, MINDOUBLE);
	*/
	ElemMaxExt(minext, maxext, faces->Get(1).Face());
	Point3d maxp, minp;
	Vec3d midext(0,0,0);
      
	//get max Extension of Frontfaces
	for (i = 1; i <= faces->Size(); i++)
	  {
	    ElemMaxExt(minp, maxp, faces->Get(i).Face());
	    MinCoords(minp, minext);
	    MaxCoords(maxp, maxext);
	    midext+=maxp-minp;
	  }


	maxextreal = maxext;
	maxext = maxext + 1e-4 * (maxext - minext);

	midext*=1./faces->Size();
	Vec3d boxext = maxext - minext;
      
	//delete old Hashtable:
	if (size.i1 != 0)
	  {
	    for (i = 1; i <= size.i1*size.i2*size.i3; i++)
	      {
		delete hashtable.Get(i);
	      }
	  } 
      
	size.i1 = int (boxext.X()/midext.X()/hashelemsizefactor+1);
	size.i2 = int (boxext.Y()/midext.Y()/hashelemsizefactor+1);
	size.i3 = int (boxext.Z()/midext.Z()/hashelemsizefactor+1);
	// PrintMessage (5, "hashsizes = ", size.i1, ", ", size.i2, ", ", size.i3);
      
	elemsize.X()=boxext.X()/size.i1;
	elemsize.Y()=boxext.Y()/size.i2;
	elemsize.Z()=boxext.Z()/size.i3;

	//create Hasharrays:
	hashtable.SetSize(size.i1*size.i2*size.i3);
	for (i = 1; i <= size.i1; i++)
	  {
	    for (j = 1; j <= size.i2; j++)
	      {
		for (k = 1; k <= size.i3; k++)
		  {
		    INDEX ind=i+(j-1)*size.i1+(k-1)*size.i2*size.i1;
		    hashtable.Elem(ind) = new Array <int> ();
		  }
	      }
	  }
      }
    else
      {
	//Clear all Hash-Arrays
	for (i = 1; i <= size.i1; i++)
	  {
	    for (j = 1; j <= size.i2; j++)
	      {
		for (k = 1; k <= size.i3; k++)
		  {
		    INDEX ind=i+(j-1)*size.i1+(k-1)*size.i2*size.i1;
		    hashtable.Elem(ind)->SetSize(0);
		  }
	      }
	  }	  
      }
  
    //Faces in Hashtable einfuegen:
    for (i = 1; i <= faces->Size(); i++)
      {
	AddElem(faces->Get(i).Face(),i);
      }
  
  }
开发者ID:11235813,项目名称:netgen-csg2d,代码行数:86,代码来源:geomsearch.cpp


注:本文中的Vec3d::X方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。