Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/vector.cpp

    rd4c9ae rccf826  
    213213{
    214214  Vector tmp;
    215   tmp[0] = x[1]* (y[2]) - x[2]* (y[1]);
    216   tmp[1] = x[2]* (y[0]) - x[0]* (y[2]);
    217   tmp[2] = x[0]* (y[1]) - x[1]* (y[0]);
     215  tmp[0] = x[1]* y[2] - x[2]* y[1];
     216  tmp[1] = x[2]* y[0] - x[0]* y[2];
     217  tmp[2] = x[0]* y[1] - x[1]* y[0];
    218218  (*this) = tmp;
    219219};
     
    232232  *this -= tmp;
    233233};
    234 
    235 /** Calculates the minimum distance vector of this vector to the plane.
    236  * \param *out output stream for debugging
    237  * \param *PlaneNormal normal of plane
    238  * \param *PlaneOffset offset of plane
    239  * \return distance to plane
    240  * \return distance vector onto to plane
    241  */
    242 Vector Vector::GetDistanceVectorToPlane(const Vector &PlaneNormal, const Vector &PlaneOffset) const
    243 {
    244   Vector temp = (*this) - PlaneOffset;
    245   temp.MakeNormalTo(PlaneNormal);
    246   temp.Scale(-1.);
    247   // then add connecting vector from plane to point
    248   temp += (*this)-PlaneOffset;
    249   double sign = temp.ScalarProduct(PlaneNormal);
    250   if (fabs(sign) > MYEPSILON)
    251     sign /= fabs(sign);
    252   else
    253     sign = 0.;
    254 
    255   temp.Normalize();
    256   temp.Scale(sign);
    257   return temp;
    258 };
    259 
    260234
    261235/** Calculates the minimum distance of this vector to the plane.
     
    551525  MatrixMultiplication(M);
    552526};
     527
     528std::pair<Vector,Vector> Vector::partition(const Vector &rhs) const{
     529  double factor = ScalarProduct(rhs)/rhs.NormSquared();
     530  Vector res= factor * rhs;
     531  return make_pair(res,(*this)-res);
     532}
     533
     534std::pair<pointset,Vector> Vector::partition(const pointset &points) const{
     535  Vector helper = *this;
     536  pointset res;
     537  for(pointset::const_iterator iter=points.begin();iter!=points.end();++iter){
     538    pair<Vector,Vector> currPart = helper.partition(*iter);
     539    res.push_back(currPart.first);
     540    helper = currPart.second;
     541  }
     542  return make_pair(res,helper);
     543}
    553544
    554545/** Do a matrix multiplication.
     
    611602};
    612603
    613 /** Mirrors atom against a given plane.
    614  * \param n[] normal vector of mirror plane.
    615  */
    616 void Vector::Mirror(const Vector &n)
    617 {
    618   double projection;
    619   projection = ScalarProduct(n)/n.NormSquared();    // remove constancy from n (keep as logical one)
    620   // withdraw projected vector twice from original one
    621   for (int i=NDIM;i--;)
    622     at(i) -= 2.*projection*n[i];
    623 };
    624 
    625604/** Calculates orthonormal vector to one given vectors.
    626605 * Just subtracts the projection onto the given vector from this vector.
     
    633612  bool result = false;
    634613  double factor = y1.ScalarProduct(*this)/y1.NormSquared();
    635   Vector x1;
    636   x1 = factor * y1;
     614  Vector x1 = factor * y1;
    637615  SubtractVector(x1);
    638616  for (int i=NDIM;i--;)
Note: See TracChangeset for help on using the changeset viewer.