本文整理汇总了C++中Vector3r函数的典型用法代码示例。如果您正苦于以下问题:C++ Vector3r函数的具体用法?C++ Vector3r怎么用?C++ Vector3r使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Vector3r函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: TEST
TEST(IOBoardModelTest, SetMultipleOutOfOrder) {
IOBoardModel test = IOBoardModel(
Quaternionr(1, 0, 0, 0),
Vector3r(0, 0, 0),
Quaternionr(1, 0, 0, 0),
Quaternionr(1, 0, 0, 0),
Vector3r(0, 0, 0));
MeasurementVector target(10);
test.set_magnetometer(Vector3r(4, 5, 6));
test.set_accelerometer(Vector3r(1, 2, 3));
test.set_barometer_amsl(10);
test.set_gps_velocity(Vector3r(7, 8, 9));
target << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;
EXPECT_EQ(test.collate(), target);
}
示例2: mincoords
void Bo1_Polyhedra_Aabb::go(const shared_ptr<Shape>& ig, shared_ptr<Bound>& bv, const Se3r& se3, const Body*){
Polyhedra* t=static_cast<Polyhedra*>(ig.get());
if (!t->IsInitialized()) t->Initialize();
if(!bv){ bv=shared_ptr<Bound>(new Aabb); }
Aabb* aabb=static_cast<Aabb*>(bv.get());
//Quaternionr invRot=se3.orientation.conjugate();
int N = (int) t->v.size();
Vector3r v_g, mincoords(0.,0.,0.), maxcoords(0.,0.,0.);
for(int i=0; i<N; i++) {
v_g=se3.orientation*t->v[i]; // vertices in global coordinates
mincoords = Vector3r(min(mincoords[0],v_g[0]),min(mincoords[1],v_g[1]),min(mincoords[2],v_g[2]));
maxcoords = Vector3r(max(maxcoords[0],v_g[0]),max(maxcoords[1],v_g[1]),max(maxcoords[2],v_g[2]));
}
aabb->min=se3.position+mincoords;
aabb->max=se3.position+maxcoords;
}
示例3: render
void CylGlRep::render(const shared_ptr<Node>& node, const GLViewInfo* viewInfo){
Real radius=viewInfo->sceneRadius*relSz*(isnan(rad)?1:(rangeRad?rangeRad->norm(rad):1));
Real ccol=isnan(col)?0:col;
Vector3r color=(rangeCol?rangeCol->color(ccol):CompUtils::scalarOnColorScale(ccol,0,1));
if(isnan(color.maxCoeff())) return;
Vector3r A=(node->pos+node->ori.conjugate()*Vector3r(xx[0],0,0)), B=(node->pos+node->ori.conjugate()*Vector3r(xx[1],0,0));
// cerr<<"A="<<A.transpose()<<", B="<<B.transpose()<<", r="<<radius<<endl;
GLUtils::Cylinder(A,B,radius,color,/*wire*/false,/*caps*/false,/*rad2*/-1,/*slices*/10,2);
}
示例4: YADE_PARALLEL_FOREACH_BODY_BEGIN
void NewtonIntegrator::ensureSync()
{
if (syncEnsured) return;
YADE_PARALLEL_FOREACH_BODY_BEGIN(const shared_ptr<Body>& b, scene->bodies){
// if(b->isClump()) continue;
scene->forces.addForce(b->getId(),Vector3r(0,0,0));
} YADE_PARALLEL_FOREACH_BODY_END();
syncEnsured=true;
}
示例5: assert
void In2_Membrane_ElastMat::go(const shared_ptr<Shape>& sh, const shared_ptr<Material>& m, const shared_ptr<Particle>& particle){
auto& ff=sh->cast<Membrane>();
if(!particle->contacts.empty()) distributeForces(particle,sh->cast<Facet>(),/*bary*/bending||applyBary);
ff.stepUpdate(scene->dt,rotIncr);
// assemble local stiffness matrix, in case it does not exist yet
ff.ensureStiffnessMatrices(particle->material->cast<ElastMat>().young,nu,thickness,/*bending*/bending,bendThickness);
// compute nodal forces response here
// ?? CST forces are applied with the - sign, DKT with the + sign; are uXy/phiXy introduced differently?
Vector6r Fcst=-(ff.KKcst*ff.uXy).transpose();
Vector9r Fdkt;
if(bending){
#ifdef MEMBRANE_CONDENSE_DKT
assert(ff.KKdkt.size()==54);
Fdkt=(ff.KKdkt*ff.phiXy).transpose();
#else
assert(ff.KKdkt.size()==81);
Vector9r uDkt_;
uDkt_<<0,ff.phiXy.segment<2>(0),0,ff.phiXy.segment<2>(2),0,ff.phiXy.segment<2>(4);
Fdkt=(ff.KKdkt*uDkt_).transpose();
#ifdef MEMBRANE_DEBUG_ROT
ff.uDkt=uDkt_; // debugging copy, acessible from python
#endif
#endif
} else {
Fdkt=Vector9r::Zero();
}
LOG_TRACE("CST: "<<Fcst.transpose())
LOG_TRACE("DKT: "<<Fdkt.transpose())
// surface load, if any
Real surfLoadForce=0.;
if(!isnan(ff.surfLoad) && ff.surfLoad!=0.){ surfLoadForce=(1/3.)*ff.getArea()*ff.surfLoad; }
// apply nodal forces
for(int i:{0,1,2}){
Vector3r Fl=Vector3r(Fcst[2*i],Fcst[2*i+1],Fdkt[3*i]+surfLoadForce);
Vector3r Tl=Vector3r(Fdkt[3*i+1],Fdkt[3*i+2],0);
ff.nodes[i]->getData<DemData>().addForceTorque(ff.node->ori*Fl,ff.node->ori*Tl);
LOG_TRACE(" "<<i<<" F: "<<Fl.transpose()<<" \t| "<<ff.node->ori*Fl);
LOG_TRACE(" "<<i<<" T: "<<Tl.transpose()<<" \t| "<<ff.node->ori*Tl);
}
}
示例6: drawArrow
/*! Draws a 3D arrow between the 3D point \p from and the 3D point \p to, both defined in the
current ModelView coordinates system.
See drawArrow(float length, float radius, int nbSubdivisions) for details. */
void GLUtils::QGLViewer::drawArrow(const Vector3r& from, const Vector3r& to, float radius, int nbSubdivisions)
{
glPushMatrix();
glTranslatef(from[0],from[1],from[2]);
Quaternionr q(Quaternionr().setFromTwoVectors(Vector3r(0,0,1),to-from));
//glMultMatrixd(q.toRotationMatrix().data());
glMultMatrix(q.toRotationMatrix().data());
drawArrow((to-from).norm(), radius, nbSubdivisions);
glPopMatrix();
}
示例7: id1
bool Law2_ScGeom_MindlinPhys_HertzWithLinearShear::go(shared_ptr<IGeom>& ig, shared_ptr<IPhys>& ip, Interaction* contact){
Body::id_t id1(contact->getId1()), id2(contact->getId2());
ScGeom* geom = static_cast<ScGeom*>(ig.get());
MindlinPhys* phys=static_cast<MindlinPhys*>(ip.get());
const Real uN=geom->penetrationDepth;
if (uN<0) {
if (neverErase) {phys->shearForce = phys->normalForce = Vector3r::Zero(); phys->kn=phys->ks=0; return true;}
else return false;
}
// normal force
Real Fn=phys->kno*pow(uN,3/2.);
phys->normalForce=Fn*geom->normal;
//phys->kn=3./2.*phys->kno*std::pow(uN,0.5); // update stiffness, not needed
// shear force
Vector3r& Fs=geom->rotate(phys->shearForce);
Real ks= nonLin>0 ? phys->kso*std::pow(uN,0.5) : phys->kso;
Vector3r shearIncrement;
if(nonLin>1){
State *de1=Body::byId(id1,scene)->state.get(), *de2=Body::byId(id2,scene)->state.get();
Vector3r shiftVel=scene->isPeriodic ? Vector3r(scene->cell->velGrad*scene->cell->hSize*contact->cellDist.cast<Real>()) : Vector3r::Zero();
Vector3r shift2 = scene->isPeriodic ? Vector3r(scene->cell->hSize*contact->cellDist.cast<Real>()): Vector3r::Zero();
Vector3r incidentV = geom->getIncidentVel(de1, de2, scene->dt, shift2, shiftVel, /*preventGranularRatcheting*/ nonLin>2 );
Vector3r incidentVn = geom->normal.dot(incidentV)*geom->normal; // contact normal velocity
Vector3r incidentVs = incidentV-incidentVn; // contact shear velocity
shearIncrement=incidentVs*scene->dt;
} else { shearIncrement=geom->shearIncrement(); }
Fs-=ks*shearIncrement;
// Mohr-Coulomb slip
Real maxFs2=pow(Fn,2)*pow(phys->tangensOfFrictionAngle,2);
if(Fs.squaredNorm()>maxFs2) Fs*=sqrt(maxFs2)/Fs.norm();
// apply forces
Vector3r f=-phys->normalForce-phys->shearForce; /* should be a reference returned by geom->rotate */ assert(phys->shearForce==Fs);
scene->forces.addForce(id1,f);
scene->forces.addForce(id2,-f);
scene->forces.addTorque(id1,(geom->radius1-.5*geom->penetrationDepth)*geom->normal.cross(f));
scene->forces.addTorque(id2,(geom->radius2-.5*geom->penetrationDepth)*geom->normal.cross(f));
return true;
}
示例8: glBegin
void Gl1_Facet::go(const shared_ptr<Shape>& cm, const shared_ptr<State>& ,bool wire,const GLViewInfo&)
{
Facet* facet = static_cast<Facet*>(cm.get());
const vector<Vector3r>& vertices = facet->vertices;
const Vector3r* ne = facet->ne;
const Real& icr = facet->icr;
if(cm->wire || wire){
// facet
glBegin(GL_LINE_LOOP);
glColor3v(normals ? Vector3r(1,0,0): cm->color);
glVertex3v(vertices[0]);
glVertex3v(vertices[1]);
glVertex3v(vertices[2]);
glEnd();
if(!normals) return;
// facet's normal
glBegin(GL_LINES);
glColor3(0.0,0.0,1.0);
glVertex3(0.0,0.0,0.0);
glVertex3v(facet->normal);
glEnd();
// normal of edges
glColor3(0.0,0.0,1.0);
glBegin(GL_LINES);
glVertex3(0.0,0.0,0.0); glVertex3v(Vector3r(icr*ne[0]));
glVertex3(0.0,0.0,0.0); glVertex3v(Vector3r(icr*ne[1]));
glVertex3(0.0,0.0,0.0); glVertex3v(Vector3r(icr*ne[2]));
glEnd();
} else {
glDisable(GL_CULL_FACE);
Vector3r normal=(facet->vertices[1]-facet->vertices[0]).cross(facet->vertices[2]-facet->vertices[1]); normal.normalize();
glColor3v(cm->color);
glBegin(GL_TRIANGLES);
glNormal3v(normal); // this makes every triangle different WRT the light direction; important!
glVertex3v(facet->vertices[0]);
glVertex3v(facet->vertices[1]);
glVertex3v(facet->vertices[2]);
glEnd();
}
}
示例9: force
void PeriIsoCompressor::avgStressIsoStiffness(const Vector3r& cellAreas, Vector3r& stress, Real& isoStiff){
Vector3r force(Vector3r::Zero()); Real stiff=0; long n=0;
FOREACH(const shared_ptr<Contact>& C, *dem->contacts){
const auto fp=dynamic_pointer_cast<FrictPhys>(C->phys); // needed for stiffness
if(!fp) continue;
force+=(C->geom->node->ori*C->phys->force).array().abs().matrix();
stiff+=(1/3.)*fp->kn+(2/3.)*fp->kt; // count kn in one direction and ks in the other two
n++;
}
isoStiff= n>0 ? (1./n)*stiff : -1;
stress=-Vector3r(force[0]/cellAreas[0],force[1]/cellAreas[1],force[2]/cellAreas[2]);
}
示例10: getDestination
SafetyEval::EvalResult SafetyEval::isSafeVelocityZ(const Vector3r& cur_pos, float vx, float vy, float z, const Quaternionr& quaternion)
{
SafetyEval::EvalResult result;
Vector3r dest_pos = getDestination(cur_pos, Vector3r(vx, vy, 0));
dest_pos.z() = z;
//check if dest_pos is safe
isSafeDestination(dest_pos, cur_pos, quaternion, result);
return result;
}
示例11: Vector3r
void Disp2DPropLoadEngine::letDisturb()
{
const Real& dt = scene->dt;
dgamma=cos(theta*Mathr::PI/180.0)*v*dt;
dh=sin(theta*Mathr::PI/180.0)*v*dt;
Real Ysup = topbox->state->pos.y();
Real Ylat = leftbox->state->pos.y();
// Changes in vertical and horizontal position :
topbox->state->pos += Vector3r(dgamma,dh,0);
leftbox->state->pos += Vector3r(dgamma/2.0,dh/2.0,0);
rightbox->state->pos += Vector3r(dgamma/2.0,dh/2.0,0);
Real Ysup_mod = topbox->state->pos.y();
Real Ylat_mod = leftbox->state->pos.y();
// with the corresponding velocities :
topbox->state->vel=Vector3r(dgamma/dt,dh/dt,0);
leftbox->state->vel = Vector3r((dgamma/dt)/2.0,dh/(2.0*dt),0);
rightbox->state->vel = Vector3r((dgamma/dt)/2.0,dh/(2.0*dt),0);
// Then computation of the angle of the rotation to be done :
computeAlpha();
if (alpha == Mathr::PI/2.0) // Case of the very beginning
{
dalpha = - atan( dgamma / (Ysup_mod -Ylat_mod) );
}
else
{
Real A = (Ysup_mod - Ylat_mod) * 2.0*tan(alpha) / (2.0*(Ysup - Ylat) + dgamma*tan(alpha) );
dalpha = atan( (A - tan(alpha))/(1.0 + A * tan(alpha)));
}
Quaternionr qcorr(AngleAxisr(dalpha,Vector3r::UnitZ()));
if(LOG)
cout << "Quaternion associe a la rotation incrementale : " << qcorr.w() << " " << qcorr.x() << " " << qcorr.y() << " " << qcorr.z() << endl;
// On applique la rotation en changeant l'orientation des plaques, leurs vang et en affectant donc alpha
leftbox->state->ori = qcorr*leftbox->state->ori;
leftbox->state->angVel = Vector3r(0,0,1)*dalpha/dt;
rightbox->state->ori = qcorr*leftbox->state->ori;
rightbox->state->angVel = Vector3r(0,0,1)*dalpha/dt;
}
示例12: mat
void SimpleShear::createSphere(shared_ptr<Body>& body, Vector3r position, Real radius)
{
body = shared_ptr<Body>(new Body); body->groupMask=1;
shared_ptr<NormalInelasticMat> mat(new NormalInelasticMat);
shared_ptr<Aabb> aabb(new Aabb);
shared_ptr<Sphere> iSphere(new Sphere);
body->state->pos =position;
body->state->ori =Quaternionr::Identity();
body->state->vel =Vector3r(0,0,0);
body->state->angVel =Vector3r(0,0,0);
Real masse =4.0/3.0*Mathr::PI*radius*radius*radius*density;
body->state->mass =masse;
body->state->inertia = Vector3r(2.0/5.0*masse*radius*radius,2.0/5.0*masse*radius*radius,2.0/5.0*masse*radius*radius);
mat->young = sphereYoungModulus;
mat->poisson = spherePoissonRatio;
mat->frictionAngle = sphereFrictionDeg * Mathr::PI/180.0;
body->material = mat;
aabb->color = Vector3r(0,1,0);
iSphere->radius = radius;
iSphere->color = ((int)(floor(8*position.x()/length)))%2?Vector3r(0.7,0.7,0.7):Vector3r(0.45,0.45,0.45);// so that we have eight different colour bands
body->shape = iSphere;
body->bound = aabb;
}
示例13: eig
void TensorGlRep::postLoad(TensorGlRep&,void*){
// symmetrize the tensor
Matrix3r sym=.5*(val+val.transpose());
Eigen::SelfAdjointEigenSolver<Matrix3r> eig(sym);
// multiply rotation matrix (princ) rows by diagonal entries
eigVec=eig.eigenvectors();
eigVal=eig.eigenvalues();
// non-symmetric tensor in principal coordinates, extract the asymmetric part
Matrix3r valP=eigVec*val*eigVec.transpose();
Matrix3r skewM=.5*(valP-valP.transpose());
skew=2*Vector3r(skewM(1,2),skewM(0,2),skewM(0,1));
};
示例14: assert
void Renderer::setClippingPlanes(){
// clipping
assert(clipPlaneNormals.size()==(size_t)numClipPlanes);
for(size_t i=0;i<(size_t)numClipPlanes; i++){
// someone could have modified those from python and truncate the vectors; fill those here in that case
if(i==clipPlanePos.size()) clipPlanePos.push_back(Vector3r::Zero());
if(i==clipPlaneOri.size()) clipPlaneOri.push_back(Quaternionr::Identity());
if(i==clipPlaneActive.size()) clipPlaneActive.push_back(false);
if(i==clipPlaneNormals.size()) clipPlaneNormals.push_back(Vector3r::UnitX());
// end filling stuff modified from python
if(clipPlaneActive[i]) clipPlaneNormals[i]=clipPlaneOri[i]*Vector3r(0,0,1);
/* glBegin(GL_LINES);glVertex3v(clipPlanePos[i]);glVertex3v(clipPlanePos[i]+clipPlaneNormals[i]);glEnd(); */
}
}
示例15: SnubCubePoints
/* Generate SnubCube*/
vector<Vector3r> SnubCubePoints(Vector3r radii){
vector<Vector3r> v;
double c1 = 0.337754;
double c2 = 1.14261;
double c3 = 0.621226;
Vector3r f,b;
f = radii/1.3437133737446;
vector<Vector3r> A;
A.push_back(Vector3r(c2,c1,c3)); A.push_back(Vector3r(c1,c3,c2)); A.push_back(Vector3r(c3,c2,c1));
A.push_back(Vector3r(-c1,-c2,-c3)); A.push_back(Vector3r(-c2,-c3,-c1)); A.push_back(Vector3r(-c3,-c1,-c2));
for(int i=0;i<(int) A.size();i++){
b = Vector3r(A[i][0]*f[0],A[i][1]*f[1],A[i][2]*f[2]);
v.push_back(b);
v.push_back(Vector3r(-b[0],-b[1], b[2]));
v.push_back(Vector3r(-b[0], b[1],-b[2]));
v.push_back(Vector3r( b[0],-b[1],-b[2]));
}
return v;
}