本文整理汇总了C++中sp::SiconosMatrix::getValue方法的典型用法代码示例。如果您正苦于以下问题:C++ SiconosMatrix::getValue方法的具体用法?C++ SiconosMatrix::getValue怎么用?C++ SiconosMatrix::getValue使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sp::SiconosMatrix
的用法示例。
在下文中一共展示了SiconosMatrix::getValue方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: init
// ================= Creation of the model =======================
void Spheres::init()
{
SP::TimeDiscretisation timedisc_;
SP::Simulation simulation_;
SP::FrictionContact osnspb_;
// User-defined main parameters
double t0 = 0; // initial computation time
double T = std::numeric_limits<double>::infinity();
double h = 0.01; // time step
double g = 9.81;
double theta = 0.5; // theta for MoreauJeanOSI integrator
std::string solverName = "NSGS";
// -----------------------------------------
// --- Dynamical systems && interactions ---
// -----------------------------------------
double R;
double m;
try
{
// ------------
// --- Init ---
// ------------
std::cout << "====> Model loading ..." << std::endl << std::endl;
_plans.reset(new SimpleMatrix("plans.dat", true));
SP::SiconosMatrix Spheres;
Spheres.reset(new SimpleMatrix("spheres.dat", true));
// -- OneStepIntegrators --
SP::OneStepIntegrator osi;
osi.reset(new MoreauJeanOSI(theta));
// -- Model --
_model.reset(new Model(t0, T));
for (unsigned int i = 0; i < Spheres->size(0); i++)
{
R = Spheres->getValue(i, 3);
m = Spheres->getValue(i, 4);
SP::SiconosVector qTmp;
SP::SiconosVector vTmp;
qTmp.reset(new SiconosVector(NDOF));
vTmp.reset(new SiconosVector(NDOF));
vTmp->zero();
(*qTmp)(0) = (*Spheres)(i, 0);
(*qTmp)(1) = (*Spheres)(i, 1);
(*qTmp)(2) = (*Spheres)(i, 2);
(*qTmp)(3) = M_PI / 2;
(*qTmp)(4) = M_PI / 4;
(*qTmp)(5) = M_PI / 2;
(*vTmp)(0) = 0;
(*vTmp)(1) = 0;
(*vTmp)(2) = 0;
(*vTmp)(3) = 0;
(*vTmp)(4) = 0;
(*vTmp)(5) = 0;
SP::LagrangianDS body;
body.reset(new SphereLDS(R, m, std11::shared_ptr<SiconosVector>(qTmp), std11::shared_ptr<SiconosVector>(vTmp)));
// -- Set external forces (weight) --
SP::SiconosVector FExt;
FExt.reset(new SiconosVector(NDOF));
FExt->zero();
FExt->setValue(2, -m * g);
body->setFExtPtr(FExt);
// add the dynamical system to the one step integrator
osi->insertDynamicalSystem(body);
// add the dynamical system in the non smooth dynamical system
_model->nonSmoothDynamicalSystem()->insertDynamicalSystem(body);
}
// ------------------
// --- Simulation ---
//.........这里部分代码省略.........
示例2: init
//.........这里部分代码省略.........
/* set center positions */
for (unsigned int i = 0 ; i < _plans->size(0); ++i)
{
SP::DiskPlanR tmpr;
tmpr.reset(new DiskPlanR(1, (*_plans)(i, 0), (*_plans)(i, 1), (*_plans)(i, 2),
(*_plans)(i, 3), (*_plans)(i, 4), (*_plans)(i, 5)));
(*_plans)(i, 3) = tmpr->getXCenter();
(*_plans)(i, 4) = tmpr->getYCenter();
}
/* _moving_plans.reset(new FMatrix(1,6));
(*_moving_plans)(0,0) = &A;
(*_moving_plans)(0,1) = &B;
(*_moving_plans)(0,2) = &C;
(*_moving_plans)(0,3) = &DA;
(*_moving_plans)(0,4) = &DB;
(*_moving_plans)(0,5) = &DC;*/
SP::SiconosMatrix Disks;
Disks.reset(new SimpleMatrix("disks.dat", true));
// -- OneStepIntegrators --
SP::OneStepIntegrator osi;
osi.reset(new MoreauJeanOSI(theta));
// -- Model --
_model.reset(new Model(t0, T));
for (unsigned int i = 0; i < Disks->size(0); i++)
{
R = Disks->getValue(i, 2);
m = Disks->getValue(i, 3);
SP::SiconosVector qTmp;
SP::SiconosVector vTmp;
qTmp.reset(new SiconosVector(NDOF));
vTmp.reset(new SiconosVector(NDOF));
vTmp->zero();
(*qTmp)(0) = (*Disks)(i, 0);
(*qTmp)(1) = (*Disks)(i, 1);
SP::LagrangianDS body;
if (R > 0)
body.reset(new Disk(R, m, qTmp, vTmp));
else
body.reset(new Circle(-R, m, qTmp, vTmp));
// -- Set external forces (weight) --
SP::SiconosVector FExt;
FExt.reset(new SiconosVector(NDOF));
FExt->zero();
FExt->setValue(1, -m * g);
body->setFExtPtr(FExt);
// add the dynamical system to the one step integrator
osi->insertDynamicalSystem(body);
// add the dynamical system in the non smooth dynamical system
_model->nonSmoothDynamicalSystem()->insertDynamicalSystem(body);
}
示例3: draw
void DisksViewer::draw()
{
int i;
char qs[6];
float lbd, w;
float lbdmax = 0.;
DSIterator itDS;
SP::DynamicalSystemsSet involvedDS;
SP::InteractionsGraph I1;
SP::Interaction interaction;
SP::Relation relation;
if (Siconos_->model()->nonSmoothDynamicalSystem()->topology()->numberOfIndexSet() > 1)
{
I1 = Siconos_->model()->simulation()->indexSet(1);
// calibration
InteractionsGraph::VIterator ui, uiend;
for (boost::tie(ui, uiend) = I1->vertices(); ui != uiend; ++ui)
{
lbdmax = fmax(I1->bundle(*ui)->lambdaOld(1)->getValue(0), lbdmax);
}
for (boost::tie(ui, uiend) = I1->vertices(); ui != uiend; ++ui)
{
interaction = I1->bundle(*ui);
relation = interaction->relation();
lbd = interaction->lambdaOld(1)->getValue(0);
// screen width of interaction
w = lbd / (2 * fmax(lbdmax, 1.)) + .03;
// disk/disk
SP::DynamicalSystem d1 = I1->properties(*ui).source;
SP::DynamicalSystem d2 = I1->properties(*ui).target;
SP::SiconosVector q1 = ask<ForPosition>(*d1);
float x1 = (*q1)(0);
float y1 = (*q1)(1);
float r1 = ask<ForRadius>(*d1);
if (d1 != d2)
{
SP::SiconosVector q2 = ask<ForPosition>(*d2);
float x2 = (*q2)(0);
float y2 = (*q2)(1);
float r2 = ask<ForRadius>(*d2);
float d = hypotf(x1 - x2, y1 - y2);
glPushMatrix();
glColor3f(.0f, .0f, .0f);
drawRec(x1, y1, x1 + (x2 - x1)*r1 / d, y1 + (y2 - y1)*r1 / d, w);
drawRec(x2, y2, x2 + (x1 - x2)*r2 / d, y2 + (y1 - y2)*r2 / d, w);
glPopMatrix();
}
else
{
SP::SiconosMatrix jachq = ask<ForJachq>(*relation);
double jx = jachq->getValue(0, 0);
double jy = jachq->getValue(0, 1);
double dj = hypot(jx, jy);
glPushMatrix();
glColor3f(.0f, .0f, .0f);
drawRec(x1, y1, x1 - r1 * jx / dj, y1 - r1 * jy / dj, w);
glPopMatrix();
}
}
}
for (unsigned int i = 0; i < GETNDS(Siconos_); i++)
{
if (shapes_[i]->selected())
{
drawSelectedQGLShape(*shapes_[i]);
}
else
{
drawQGLShape(*shapes_[i]);
}
}
glColor3f(.45, .45, .45);
glLineWidth(1.);
drawGrid(100, 200);
//.........这里部分代码省略.........