本文整理汇总了C++中TDomain::position_accessor方法的典型用法代码示例。如果您正苦于以下问题:C++ TDomain::position_accessor方法的具体用法?C++ TDomain::position_accessor怎么用?C++ TDomain::position_accessor使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TDomain
的用法示例。
在下文中一共展示了TDomain::position_accessor方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PrintElementEdgeRatios
static void PrintElementEdgeRatios(TDomain& dom)
{
int elemType = dom.domain_info().element_type();
MultiGrid& mg = *dom.grid();
UG_LOG("Element Edge Ratios:\n");
for(size_t lvl = 0; lvl < mg.num_levels(); ++lvl){
UG_LOG(" level " << lvl << ":\t");
switch(elemType){
case FACE:
PrintElementEdgeRatios(mg, mg.begin<Face>(lvl),
mg.end<Face>(lvl), dom.position_accessor());
break;
case VOLUME:
PrintElementEdgeRatios(mg, mg.begin<Volume>(lvl),
mg.end<Volume>(lvl), dom.position_accessor());
break;
default:
UG_LOG("---\n");
break;
}
}
}
示例2: FaceArea
static number FaceArea(TDomain& dom, ISelector& sel)
{
typename TDomain::position_accessor_type& aaPos = dom.position_accessor();
UG_ASSERT(TDomain::position_type::Size <= 3, "too many coordinates.");
return FaceArea(sel, aaPos);
}
示例3: ProjectVerticesToSphere
static void ProjectVerticesToSphere(TDomain& dom, std::vector<number> center,
number radius, number eps)
{
static const int dim = TDomain::dim;
typename TDomain::position_accessor_type& aaPos = dom.position_accessor();
typename TDomain::grid_type& g = *dom.grid();
if((int)center.size() != dim)
UG_THROW("Expect center to be of dimension "<<dim);
MathVector<dim> Center;
for(int d = 0; d < dim; d++) Center[d] = center[d];
for(VertexIterator iter = g.vertices_begin();
iter != g.vertices_end(); ++iter)
{
MathVector<dim>& pos = aaPos[*iter];
// move only vertices in eps-environment of sphere
if( VecDistance(pos, Center) < radius - eps ||
VecDistance(pos, Center) > radius + eps) continue;
// get closest point on sphere
MathVector<dim> dir;
VecSubtract(dir, pos, Center);
number s, s1Out, s2Out;
if(RaySphereIntersection(s1Out,s2Out, Center, dir, Center, radius) < 1)
UG_THROW("No intersection found for pos "<<pos);
if(s1Out > s2Out) s = s1Out; else s = s2Out;
if(s <= 0) UG_THROW("Invalid scale "<<s);
// set new pos
VecScaleAdd(pos, 1.0, Center, s, dir);
}
}
示例4: TranslateDomain
static void TranslateDomain(TDomain& dom, number tx, number ty, number tz)
{
typename TDomain::position_accessor_type& aaPos = dom.position_accessor();
typename TDomain::grid_type& g = *dom.grid();
vector3 t(tx, ty, tz);
const int numCoords = TDomain::position_type::Size;
UG_ASSERT(numCoords <= 3, "too many coordinates.");
for(VertexIterator iter = g.vertices_begin();
iter != g.vertices_end(); ++iter)
{
for(int i = 0; i < numCoords; ++i)
aaPos[*iter][i] += t[i];
}
}
示例5: RandomizeDomain
static void RandomizeDomain(TDomain& dom, number dx, number dy, number dz)
{
typename TDomain::position_accessor_type& aaPos = dom.position_accessor();
typename TDomain::grid_type& g = *dom.grid();
vector3 d(dx, dy, dz);
const int numCoords = TDomain::position_type::Size;
UG_ASSERT(numCoords <= 3, "too many coordinates.");
for(VertexIterator iter = g.vertices_begin();
iter != g.vertices_end(); ++iter)
{
for(int i = 0; i < numCoords; ++i)
aaPos[*iter][i] += urand(-d[i], d[i]);
}
}
示例6: GetMaxEdgeLength
static number GetMaxEdgeLength(TDomain& dom)
{
typename TDomain::position_accessor_type& aaPos = dom.position_accessor();
typename TDomain::grid_type& g = *dom.grid();
number maxLenSq = 0;
for(EdgeIterator eiter = g.template begin<Edge>();
eiter != g.template end<Edge>(); ++eiter)
{
maxLenSq = max(maxLenSq, EdgeLengthSq(*eiter, aaPos));
}
#ifdef UG_PARALLEL
pcl::ProcessCommunicator com;
number gMaxLenSq = com.allreduce(maxLenSq, PCL_RO_MAX);
return sqrt(gMaxLenSq);
#else
return sqrt(maxLenSq);
#endif
}