Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/vector.cpp

    reddea2 r112b09  
    55 */
    66
     7#include "Helpers/MemDebug.hpp"
    78
    89#include "vector.hpp"
     
    213214{
    214215  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]);
     216  tmp[0] = x[1]* y[2] - x[2]* y[1];
     217  tmp[1] = x[2]* y[0] - x[0]* y[2];
     218  tmp[2] = x[0]* y[1] - x[1]* y[0];
    218219  (*this) = tmp;
    219220};
     
    232233  *this -= tmp;
    233234};
    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 
    260235
    261236/** Calculates the minimum distance of this vector to the plane.
     
    266241 * \return distance to plane
    267242 */
    268 double Vector::DistanceToPlane(const Vector &PlaneNormal, const Vector &PlaneOffset) const
    269 {
    270   return GetDistanceVectorToPlane(PlaneNormal,PlaneOffset).Norm();
     243double Vector::DistanceToSpace(const Space &space) const
     244{
     245  return space.distance(*this);
    271246};
    272247
     
    551526  MatrixMultiplication(M);
    552527};
     528
     529std::pair<Vector,Vector> Vector::partition(const Vector &rhs) const{
     530  double factor = ScalarProduct(rhs)/rhs.NormSquared();
     531  Vector res= factor * rhs;
     532  return make_pair(res,(*this)-res);
     533}
     534
     535std::pair<pointset,Vector> Vector::partition(const pointset &points) const{
     536  Vector helper = *this;
     537  pointset res;
     538  for(pointset::const_iterator iter=points.begin();iter!=points.end();++iter){
     539    pair<Vector,Vector> currPart = helper.partition(*iter);
     540    res.push_back(currPart.first);
     541    helper = currPart.second;
     542  }
     543  return make_pair(res,helper);
     544}
    553545
    554546/** Do a matrix multiplication.
     
    611603};
    612604
    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 
    625605/** Calculates orthonormal vector to one given vectors.
    626606 * Just subtracts the projection onto the given vector from this vector.
     
    633613  bool result = false;
    634614  double factor = y1.ScalarProduct(*this)/y1.NormSquared();
    635   Vector x1;
    636   x1 = factor * y1;
     615  Vector x1 = factor * y1;
    637616  SubtractVector(x1);
    638617  for (int i=NDIM;i--;)
Note: See TracChangeset for help on using the changeset viewer.