本文整理汇总了C++中Vec3d::Z方法的典型用法代码示例。如果您正苦于以下问题:C++ Vec3d::Z方法的具体用法?C++ Vec3d::Z怎么用?C++ Vec3d::Z使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Vec3d
的用法示例。
在下文中一共展示了Vec3d::Z方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: FromPlain
void referencetransform :: FromPlain (const Point3d & pp, Point3d & p) const
{
Vec3d v;
// v = (h * pp.X()) * ex + (h * pp.Y()) * ey + (h * pp.Z()) * ez;
// p = rp + v;
v.X() = pp.X() * exh.X() + pp.Y() * eyh.X() + pp.Z() * ezh.X();
v.Y() = pp.X() * exh.Y() + pp.Y() * eyh.Y() + pp.Z() * ezh.Y();
v.Z() = pp.X() * exh.Z() + pp.Y() * eyh.Z() + pp.Z() * ezh.Z();
p.X() = rp.X() + v.X();
p.Y() = rp.Y() + v.Y();
p.Z() = rp.Z() + v.Z();
}
示例2: SolveLinearSystemLS2
int SolveLinearSystemLS2 (const Vec3d & col1,
const Vec3d & col2,
const Vec2d & rhs,
Vec3d & sol, double & x, double & y)
{
double a11 = col1 * col1;
double a12 = col1 * col2;
double a22 = col2 * col2;
double det = a11 * a22 - a12 * a12;
if (fabs (det) <= 1e-12 * col1.Length() * col2.Length() ||
col1.Length2() == 0 || col2.Length2() == 0)
{
sol = Vec3d (0, 0, 0);
x = 0; y = 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();
x = invrhs.X();
y = invrhs.Y();
return 0;
/*
Vec3d inv1, inv2;
int err =
PseudoInverse (col1, col2, inv1, inv2);
sol = rhs.X() * inv1 + rhs.Y() * inv2;
return err;
*/
}
示例3: sprintf
MyStr::MyStr(const Vec3d& p)
{
char buffer[80];
//if (fabs(d) < 1E-100) {d = 0;}
sprintf(buffer, "[%g, %g, %g]", p.X(), p.Y(), p.Z());
length = unsigned(strlen(buffer));
if (length > SHORTLEN)
str = new char[length + 1];
else
str = shortstr;
strcpy(str, buffer);
}
示例4: getMeshNormal
void NGInterface::getMeshNormal(int i,double* x)
{
Element2d &face = ((Mesh*)mesh)->SurfaceElement(i);
const Point3d &lp1 = ((Mesh*)mesh)->Point (face.PNum(1)),
&lp2 = ((Mesh*)mesh)->Point (face.PNum(2)),
&lp3 = ((Mesh*)mesh)->Point (face.PNum(3));
Vec3d n = Cross (Vec3d (lp1, lp2), Vec3d (lp1, lp3));
n /= (n.Length()+1e-12);
x[0] = n.X();
x[1] = n.Y();
x[2] = n.Z();
}
示例5: 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;
}
示例6: 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;
*/
}
示例7: 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;
}
示例8: 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);
}
示例9: 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;
}
示例10: Transpose
void Transpose (Vec3d & v1, Vec3d & v2, Vec3d & v3)
{
Swap (v1.Y(), v2.X());
Swap (v1.Z(), v3.X());
Swap (v2.Z(), v3.Y());
}
示例11: 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);
}
}