本文整理汇总了C++中TVector3::getLength方法的典型用法代码示例。如果您正苦于以下问题:C++ TVector3::getLength方法的具体用法?C++ TVector3::getLength怎么用?C++ TVector3::getLength使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TVector3
的用法示例。
在下文中一共展示了TVector3::getLength方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getForceField
// calculates and adds its forces to the current forces of the force field
void MMFF94OutOfPlaneBend::updateForces()
{
const double FC = K0 * 2. * RADIAN_TO_DEGREE * RADIAN_TO_DEGREE;
bool us = getForceField()->getUseSelection();
//////////////////////////////////////////////////////////////////
// ids of the non-central atoms for the three runs per out of plane bend:
vector<vector<Position> > atom_ids;
// Atom i:
vector<Position> temp;
temp.push_back(0);
temp.push_back(0);
temp.push_back(1);
atom_ids.push_back(temp);
// Atom k:
temp.clear();
temp.push_back(1);
temp.push_back(2);
temp.push_back(2);
atom_ids.push_back(temp);
// Atom l:
temp.clear();
temp.push_back(2);
temp.push_back(1);
temp.push_back(0);
atom_ids.push_back(temp);
////////////////////////////////////////////////////////////////////////
// all calculations below have to be performed at double precision
// otherwise the results are far off, especially for small wilson angles
//
// temp variables:
double length;
TVector3<double> delta;
// the three atoms bound to the central atom (for the actual plane bend)
vector<Atom*> partners(3);
// lenght of the vectors from the central atom to outer atoms:
vector<double> lengths(3);
// normalized bond vectors from central atom to outer atoms:
vector<TVector3<double> > nbv(3);
// index of the individual atoms in partners and nbv:
Position pi, pk, pl;
// normal vectors of the three planes:
TVector3<double> an, bn, cn;
for (Position t = 0; t < bends_.size(); t++)
{
// the current bend
const OutOfPlaneBend& bend = bends_[t];
Atom& ta1 = *bend.i->ptr;
Atom& ta2 = *bend.j->ptr;
Atom& ta3 = *bend.k->ptr;
Atom& ta4 = *bend.l->ptr;
// if using selection and no atom is selected: ignore this bend:
if (us && !ta1.isSelected() &&
!ta2.isSelected() &&
!ta3.isSelected() &&
!ta4.isSelected())
{
continue;
}
// non central atoms for this bend:
partners[0] = &ta1;
partners[1] = &ta3;
partners[2] = &ta4;
Atom& center_atom = ta2;
// abort for this bend if two atoms have the same position:
bool error = false;
// calculate normalized bond vectors from central atom to outer atoms:
for (Position p = 0; p < 3; p++)
{
// transformation from single to double precision:
delta.x = partners[p]->getPosition().x - center_atom.getPosition().x;
delta.y = partners[p]->getPosition().y - center_atom.getPosition().y;
delta.z = partners[p]->getPosition().z - center_atom.getPosition().z;
length = delta.getLength();
if (Maths::isZero(length))
{
error = true;
break;
}
// normalize the bond vector:
delta /= length;
// store the normalized bond vector:
nbv[p] = delta;
// store length of this bond:
lengths[p] = length;
}
//.........这里部分代码省略.........