Ignore:
Timestamp:
Apr 13, 2010, 1:22:42 PM (16 years ago)
Author:
Tillmann Crueger <crueger@…>
Children:
e7ea64
Parents:
0f55b2
Message:

Prepared interface of Vector Class for transition to VectorComposites

File:
1 edited

Legend:

Unmodified
Added
Removed
  • molecuilder/src/tesselation.cpp

    r0f55b2 r1f591b  
    234234  // have a normal vector on the base line pointing outwards
    235235  //Log() << Verbose(0) << "INFO: " << *this << " has vectors at " << *(endpoints[0]->node->node) << " and at " << *(endpoints[1]->node->node) << "." << endl;
    236   BaseLineCenter.CopyVector(endpoints[0]->node->node);
    237   BaseLineCenter.AddVector(endpoints[1]->node->node);
    238   BaseLineCenter.Scale(1./2.);
    239   BaseLine.CopyVector(endpoints[0]->node->node);
    240   BaseLine.SubtractVector(endpoints[1]->node->node);
     236  BaseLineCenter = (1./2.)*((*endpoints[0]->node->node) + (*endpoints[1]->node->node));
     237  BaseLine = (*endpoints[0]->node->node) - (*endpoints[1]->node->node);
    241238  //Log() << Verbose(0) << "INFO: Baseline is " << BaseLine << " and its center is at " << BaseLineCenter << "." << endl;
    242239
     
    248245  for(TriangleMap::const_iterator runner = triangles.begin(); runner != triangles.end(); runner++) {
    249246    //Log() << Verbose(0) << "INFO: NormalVector of " << *(runner->second) << " is " << runner->second->NormalVector << "." << endl;
    250     NormalCheck.AddVector(&runner->second->NormalVector);
    251     NormalCheck.Scale(sign);
     247    NormalCheck += runner->second->NormalVector;
     248    NormalCheck *= sign;
    252249    sign = -sign;
    253250    if (runner->second->NormalVector.NormSquared() > MYEPSILON)
    254       BaseLineNormal.CopyVector(&runner->second->NormalVector);   // yes, copy second on top of first
     251      BaseLineNormal = runner->second->NormalVector;   // yes, copy second on top of first
    255252    else {
    256253      eLog() << Verbose(0) << "Triangle " << *runner->second << " has zero normal vector!" << endl;
     
    259256    if (node != NULL) {
    260257      //Log() << Verbose(0) << "INFO: Third node for triangle " << *(runner->second) << " is " << *node << " at " << *(node->node->node) << "." << endl;
    261       helper[i].CopyVector(node->node->node);
    262       helper[i].SubtractVector(&BaseLineCenter);
     258      helper[i] = (*node->node->node) - BaseLineCenter;
    263259      helper[i].MakeNormalTo(BaseLine);  // we want to compare the triangle's heights' angles!
    264260      //Log() << Verbose(0) << "INFO: Height vector with respect to baseline is " << helper[i] << "." << endl;
     
    410406
    411407  // make it always point inward (any offset vector onto plane projected onto normal vector suffices)
    412   if (NormalVector.ScalarProduct(&OtherVector) > 0.)
     408  if (NormalVector.ScalarProduct(OtherVector) > 0.)
    413409    NormalVector.Scale(-1.);
    414410  Log() << Verbose(1) << "Normal Vector is " << NormalVector << "." << endl;
     
    446442  Log() << Verbose(1) << "INFO: Intersection is " << *Intersection << "." << endl;
    447443
    448   if (Intersection->DistanceSquared(endpoints[0]->node->node) < MYEPSILON) {
     444  if (Intersection->DistanceSquared(*endpoints[0]->node->node) < MYEPSILON) {
    449445    Log() << Verbose(1) << "Intersection coindices with first endpoint." << endl;
    450446    return true;
    451   }   else if (Intersection->DistanceSquared(endpoints[1]->node->node) < MYEPSILON) {
     447  }   else if (Intersection->DistanceSquared(*endpoints[1]->node->node) < MYEPSILON) {
    452448    Log() << Verbose(1) << "Intersection coindices with second endpoint." << endl;
    453449    return true;
    454   }   else if (Intersection->DistanceSquared(endpoints[2]->node->node) < MYEPSILON) {
     450  }   else if (Intersection->DistanceSquared(*endpoints[2]->node->node) < MYEPSILON) {
    455451    Log() << Verbose(1) << "Intersection coindices with third endpoint." << endl;
    456452    return true;
     
    464460                                                    *(endpoints[(i+2)%3]->node->node),
    465461                                                    *Intersection);
    466       helper.CopyVector(endpoints[(i+1)%3]->node->node);
    467       helper.SubtractVector(endpoints[i%3]->node->node);
    468       CrossPoint.SubtractVector(endpoints[i%3]->node->node);  // cross point was returned as absolute vector
    469       const double s = CrossPoint.ScalarProduct(&helper)/helper.NormSquared();
     462      helper = (*endpoints[(i+1)%3]->node->node) - (*endpoints[i%3]->node->node);
     463      CrossPoint -= (*endpoints[i%3]->node->node);  // cross point was returned as absolute vector
     464      const double s = CrossPoint.ScalarProduct(helper)/helper.NormSquared();
    470465      Log() << Verbose(1) << "INFO: Factor s is " << s << "." << endl;
    471466      if ((s < -MYEPSILON) || ((s-1.) > MYEPSILON)) {
     
    510505  }
    511506  catch (LinearDependenceException &excp) {
    512     ClosestPoint->CopyVector(x);
     507    (*ClosestPoint) = (*x);
    513508  }
    514509
    515510  // 2. Calculate in plane part of line (x, intersection)
    516   Vector InPlane;
    517   InPlane.CopyVector(x);
    518   InPlane.SubtractVector(ClosestPoint);  // points from plane intersection to straight-down point
    519   InPlane.ProjectOntoPlane(&NormalVector);
    520   InPlane.AddVector(ClosestPoint);
     511  Vector InPlane = (*x) - (*ClosestPoint); // points from plane intersection to straight-down point
     512  InPlane.ProjectOntoPlane(NormalVector);
     513  InPlane += *ClosestPoint;
    521514
    522515  Log() << Verbose(2) << "INFO: Triangle is " << *this << "." << endl;
     
    532525  for (int i=0;i<3;i++) {
    533526    // treat direction of line as normal of a (cut)plane and the desired point x as the plane offset, the intersect line with point
    534     Direction.CopyVector(endpoints[(i+1)%3]->node->node);
    535     Direction.SubtractVector(endpoints[i%3]->node->node);
     527    Direction = (*endpoints[(i+1)%3]->node->node) - (*endpoints[i%3]->node->node);
    536528    // calculate intersection, line can never be parallel to Direction (is the same vector as PlaneNormal);
    537529
    538530    CrossPoint[i] = Plane(Direction, InPlane).GetIntersection(*(endpoints[i%3]->node->node), *(endpoints[(i+1)%3]->node->node));
    539531
    540     CrossDirection[i].CopyVector(&CrossPoint[i]);
    541     CrossDirection[i].SubtractVector(&InPlane);
    542     CrossPoint[i].SubtractVector(endpoints[i%3]->node->node);  // cross point was returned as absolute vector
    543     const double s = CrossPoint[i].ScalarProduct(&Direction)/Direction.NormSquared();
     532    CrossDirection[i] = CrossPoint[i] - InPlane;
     533    CrossPoint[i] -= (*endpoints[i%3]->node->node);  // cross point was returned as absolute vector
     534    const double s = CrossPoint[i].ScalarProduct(Direction)/Direction.NormSquared();
    544535    Log() << Verbose(2) << "INFO: Factor s is " << s << "." << endl;
    545536    if ((s >= -MYEPSILON) && ((s-1.) <= MYEPSILON)) {
    546       CrossPoint[i].AddVector(endpoints[i%3]->node->node);  // make cross point absolute again
     537      CrossPoint[i] += (*endpoints[i%3]->node->node);  // make cross point absolute again
    547538      Log() << Verbose(2) << "INFO: Crosspoint is " << CrossPoint[i] << ", intersecting BoundaryLine between " << *endpoints[i%3]->node->node << " and " << *endpoints[(i+1)%3]->node->node << "." << endl;
    548       const double distance = CrossPoint[i].DistanceSquared(x);
     539      const double distance = CrossPoint[i].DistanceSquared(*x);
    549540      if ((ShortestDistance < 0.) || (ShortestDistance > distance)) {
    550541        ShortestDistance = distance;
    551         ClosestPoint->CopyVector(&CrossPoint[i]);
     542        (*ClosestPoint) = CrossPoint[i];
    552543      }
    553544    } else
     
    556547  InsideFlag = true;
    557548  for (int i=0;i<3;i++) {
    558     const double sign = CrossDirection[i].ScalarProduct(&CrossDirection[(i+1)%3]);
    559     const double othersign = CrossDirection[i].ScalarProduct(&CrossDirection[(i+2)%3]);;
     549    const double sign = CrossDirection[i].ScalarProduct(CrossDirection[(i+1)%3]);
     550    const double othersign = CrossDirection[i].ScalarProduct(CrossDirection[(i+2)%3]);;
    560551    if ((sign > -MYEPSILON) && (othersign > -MYEPSILON))  // have different sign
    561552      InsideFlag = false;
    562553  }
    563554  if (InsideFlag) {
    564     ClosestPoint->CopyVector(&InPlane);
    565     ShortestDistance = InPlane.DistanceSquared(x);
     555    (*ClosestPoint) = InPlane;
     556    ShortestDistance = InPlane.DistanceSquared(*x);
    566557  } else {  // also check endnodes
    567558    for (int i=0;i<3;i++) {
    568       const double distance = x->DistanceSquared(endpoints[i]->node->node);
     559      const double distance = x->DistanceSquared(*endpoints[i]->node->node);
    569560      if ((ShortestDistance < 0.) || (ShortestDistance > distance)) {
    570561        ShortestDistance = distance;
    571         ClosestPoint->CopyVector(endpoints[i]->node->node);
     562        (*ClosestPoint) = (*endpoints[i]->node->node);
    572563      }
    573564    }
     
    687678  center->Zero();
    688679  for(int i=0;i<3;i++)
    689     center->AddVector(endpoints[i]->node->node);
     680    (*center) += (*endpoints[i]->node->node);
    690681  center->Scale(1./3.);
    691682  Log() << Verbose(1) << "INFO: Center is at " << *center << "." << endl;
     
    755746    for (int i=0;i<3;i++) // increase each of them
    756747      Runner[i]++;
    757     TotalNormal->AddVector(&TemporaryNormal);
     748    (*TotalNormal) += TemporaryNormal;
    758749  }
    759750  TotalNormal->Scale(1./(double)counter);
    760751
    761752  // make it always point inward (any offset vector onto plane projected onto normal vector suffices)
    762   if (TotalNormal->ScalarProduct(&OtherVector) > 0.)
     753  if (TotalNormal->ScalarProduct(OtherVector) > 0.)
    763754    TotalNormal->Scale(-1.);
    764755  Log() << Verbose(1) << "Normal Vector is " << *TotalNormal << "." << endl;
     
    777768  int counter = 0;
    778769  for(PointSet::const_iterator Runner = endpoints.begin(); Runner != endpoints.end(); Runner++) {
    779     center->AddVector((*Runner)->node->node);
     770    (*center) += (*(*Runner)->node->node);
    780771    counter++;
    781772  }
     
    10281019{
    10291020        Info FunctionInfo(__func__);
    1030   OptCenter.CopyVector(&OptCandidateCenter);
    1031   OtherOptCenter.CopyVector(&OtherOptCandidateCenter);
     1021  OptCenter = OptCandidateCenter;
     1022  OtherOptCenter = OtherOptCandidateCenter;
    10321023};
    10331024
     
    11051096  int num=0;
    11061097  for (GoToFirst(); (!IsEnd()); GoToNext()) {
    1107     Center->AddVector(GetPoint()->node);
     1098    (*Center) += (*GetPoint()->node);
    11081099    num++;
    11091100  }
     
    12171208          for (; C != PointsOnBoundary.end(); C++)
    12181209            {
    1219               tmp = A->second->node->node->DistanceSquared(B->second->node->node);
     1210              tmp = A->second->node->node->DistanceSquared(*B->second->node->node);
    12201211              distance = tmp * tmp;
    1221               tmp = A->second->node->node->DistanceSquared(C->second->node->node);
     1212              tmp = A->second->node->node->DistanceSquared(*C->second->node->node);
    12221213              distance += tmp * tmp;
    1223               tmp = B->second->node->node->DistanceSquared(C->second->node->node);
     1214              tmp = B->second->node->node->DistanceSquared(*C->second->node->node);
    12241215              distance += tmp * tmp;
    12251216              DistanceMMap.insert(DistanceMultiMapPair(distance, pair<PointMap::iterator, PointMap::iterator> (B, C)));
     
    12551246            continue;
    12561247          // 4a. project onto plane vector
    1257           TrialVector.CopyVector(checker->second->node->node);
    1258           TrialVector.SubtractVector(A->second->node->node);
    1259           distance = TrialVector.ScalarProduct(&PlaneVector);
     1248          TrialVector = (*checker->second->node->node) - (*A->second->node->node);
     1249          distance = TrialVector.ScalarProduct(PlaneVector);
    12601250          if (fabs(distance) < 1e-4) // we need to have a small epsilon around 0 which is still ok
    12611251            continue;
     
    12851275            }
    12861276          // 4d. Check whether the point is inside the triangle (check distance to each node
    1287           tmp = checker->second->node->node->DistanceSquared(A->second->node->node);
     1277          tmp = checker->second->node->node->DistanceSquared(*A->second->node->node);
    12881278          int innerpoint = 0;
    12891279          if ((tmp < A->second->node->node->DistanceSquared(
    1290               baseline->second.first->second->node->node)) && (tmp
     1280              *baseline->second.first->second->node->node)) && (tmp
    12911281              < A->second->node->node->DistanceSquared(
    1292                   baseline->second.second->second->node->node)))
     1282                  *baseline->second.second->second->node->node)))
    12931283            innerpoint++;
    12941284          tmp = checker->second->node->node->DistanceSquared(
    1295               baseline->second.first->second->node->node);
     1285              *baseline->second.first->second->node->node);
    12961286          if ((tmp < baseline->second.first->second->node->node->DistanceSquared(
    1297               A->second->node->node)) && (tmp
     1287              *A->second->node->node)) && (tmp
    12981288              < baseline->second.first->second->node->node->DistanceSquared(
    1299                   baseline->second.second->second->node->node)))
     1289                  *baseline->second.second->second->node->node)))
    13001290            innerpoint++;
    13011291          tmp = checker->second->node->node->DistanceSquared(
    1302               baseline->second.second->second->node->node);
     1292              *baseline->second.second->second->node->node);
    13031293          if ((tmp < baseline->second.second->second->node->node->DistanceSquared(
    1304               baseline->second.first->second->node->node)) && (tmp
     1294              *baseline->second.first->second->node->node)) && (tmp
    13051295              < baseline->second.second->second->node->node->DistanceSquared(
    1306                   A->second->node->node)))
     1296                  *A->second->node->node)))
    13071297            innerpoint++;
    13081298          // 4e. If so, break 4. loop and continue with next candidate in 1. loop
     
    13901380        // prepare some auxiliary vectors
    13911381        Vector BaseLineCenter, BaseLine;
    1392         BaseLineCenter.CopyVector(baseline->second->endpoints[0]->node->node);
    1393         BaseLineCenter.AddVector(baseline->second->endpoints[1]->node->node);
    1394         BaseLineCenter.Scale(1. / 2.); // points now to center of base line
    1395         BaseLine.CopyVector(baseline->second->endpoints[0]->node->node);
    1396         BaseLine.SubtractVector(baseline->second->endpoints[1]->node->node);
     1382        BaseLineCenter = 0.5 * ((*baseline->second->endpoints[0]->node->node) +
     1383                                (*baseline->second->endpoints[1]->node->node));
     1384        BaseLine = (*baseline->second->endpoints[0]->node->node) - (*baseline->second->endpoints[1]->node->node);
    13971385
    13981386        // offset to center of triangle
    13991387        CenterVector.Zero();
    14001388        for (int i = 0; i < 3; i++)
    1401           CenterVector.AddVector(BTS->endpoints[i]->node->node);
     1389          CenterVector += (*BTS->endpoints[i]->node->node);
    14021390        CenterVector.Scale(1. / 3.);
    14031391        Log() << Verbose(2) << "CenterVector of base triangle is " << CenterVector << endl;
    14041392
    14051393        // normal vector of triangle
    1406         NormalVector.CopyVector(Center);
    1407         NormalVector.SubtractVector(&CenterVector);
     1394        NormalVector = (*Center) - CenterVector;
    14081395        BTS->GetNormalVector(NormalVector);
    1409         NormalVector.CopyVector(&BTS->NormalVector);
     1396        NormalVector = BTS->NormalVector;
    14101397        Log() << Verbose(2) << "NormalVector of base triangle is " << NormalVector << endl;
    14111398
     
    14131400        // project center vector onto triangle plane (points from intersection plane-NormalVector to plane-CenterVector intersection)
    14141401        PropagationVector = Plane(BaseLine, NormalVector,0).getNormal();
    1415         TempVector.CopyVector(&CenterVector);
    1416         TempVector.SubtractVector(baseline->second->endpoints[0]->node->node); // TempVector is vector on triangle plane pointing from one baseline egde towards center!
     1402        TempVector = CenterVector - (*baseline->second->endpoints[0]->node->node); // TempVector is vector on triangle plane pointing from one baseline egde towards center!
    14171403        //Log() << Verbose(0) << "Projection of propagation onto temp: " << PropagationVector.Projection(&TempVector) << "." << endl;
    1418         if (PropagationVector.ScalarProduct(&TempVector) > 0) // make sure normal propagation vector points outward from baseline
     1404        if (PropagationVector.ScalarProduct(TempVector) > 0) // make sure normal propagation vector points outward from baseline
    14191405          PropagationVector.Scale(-1.);
    14201406        Log() << Verbose(2) << "PropagationVector of base triangle is " << PropagationVector << endl;
     
    14271413
    14281414            // first check direction, so that triangles don't intersect
    1429             VirtualNormalVector.CopyVector(target->second->node->node);
    1430             VirtualNormalVector.SubtractVector(&BaseLineCenter); // points from center of base line to target
    1431             VirtualNormalVector.ProjectOntoPlane(&NormalVector);
    1432             TempAngle = VirtualNormalVector.Angle(&PropagationVector);
     1415            VirtualNormalVector = (*target->second->node->node) - BaseLineCenter;
     1416            TempAngle = VirtualNormalVector.Angle(PropagationVector);
    14331417            Log() << Verbose(2) << "VirtualNormalVector is " << VirtualNormalVector << " and PropagationVector is " << PropagationVector << "." << endl;
    14341418            if (TempAngle > (M_PI/2.)) { // no bends bigger than Pi/2 (90 degrees)
     
    14571441
    14581442            // check for linear dependence
    1459             TempVector.CopyVector(baseline->second->endpoints[0]->node->node);
    1460             TempVector.SubtractVector(target->second->node->node);
    1461             helper.CopyVector(baseline->second->endpoints[1]->node->node);
    1462             helper.SubtractVector(target->second->node->node);
    1463             helper.ProjectOntoPlane(&TempVector);
     1443            TempVector = (*baseline->second->endpoints[0]->node->node) - (*target->second->node->node);
     1444            helper = (*baseline->second->endpoints[1]->node->node) - (*target->second->node->node);
     1445            helper.ProjectOntoPlane(TempVector);
    14641446            if (fabs(helper.NormSquared()) < MYEPSILON) {
    14651447              Log() << Verbose(2) << "Chosen set of vectors is linear dependent." << endl;
     
    14721454                                        *(baseline->second->endpoints[1]->node->node),
    14731455                                        *(target->second->node->node)).getNormal();
    1474             TempVector.CopyVector(baseline->second->endpoints[0]->node->node);
    1475             TempVector.AddVector(baseline->second->endpoints[1]->node->node);
    1476             TempVector.AddVector(target->second->node->node);
    1477             TempVector.Scale(1./3.);
    1478             TempVector.SubtractVector(Center);
     1456            TempVector = (1./3.) * ((*baseline->second->endpoints[0]->node->node) +
     1457                                    (*baseline->second->endpoints[1]->node->node) +
     1458                                    (*target->second->node->node));
     1459            TempVector -= (*Center);
    14791460            // make it always point outward
    1480             if (VirtualNormalVector.ScalarProduct(&TempVector) < 0)
     1461            if (VirtualNormalVector.ScalarProduct(TempVector) < 0)
    14811462              VirtualNormalVector.Scale(-1.);
    14821463            // calculate angle
    1483             TempAngle = NormalVector.Angle(&VirtualNormalVector);
     1464            TempAngle = NormalVector.Angle(VirtualNormalVector);
    14841465            Log() << Verbose(2) << "NormalVector is " << VirtualNormalVector << " and the angle is " << TempAngle << "." << endl;
    14851466            if ((SmallestAngle - TempAngle) > MYEPSILON) { // set to new possible winner
     
    14891470            } else if (fabs(SmallestAngle - TempAngle) < MYEPSILON) { // check the angle to propagation, both possible targets are in one plane! (their normals have same angle)
    14901471              // hence, check the angles to some normal direction from our base line but in this common plane of both targets...
    1491               helper.CopyVector(target->second->node->node);
    1492               helper.SubtractVector(&BaseLineCenter);
    1493               helper.ProjectOntoPlane(&BaseLine);
     1472              helper = (*target->second->node->node) - BaseLineCenter;
     1473              helper.ProjectOntoPlane(BaseLine);
    14941474              // ...the one with the smaller angle is the better candidate
    1495               TempVector.CopyVector(target->second->node->node);
    1496               TempVector.SubtractVector(&BaseLineCenter);
    1497               TempVector.ProjectOntoPlane(&VirtualNormalVector);
    1498               TempAngle = TempVector.Angle(&helper);
    1499               TempVector.CopyVector(winner->second->node->node);
    1500               TempVector.SubtractVector(&BaseLineCenter);
    1501               TempVector.ProjectOntoPlane(&VirtualNormalVector);
    1502               if (TempAngle < TempVector.Angle(&helper)) {
    1503                 TempAngle = NormalVector.Angle(&VirtualNormalVector);
     1475              TempVector = (*target->second->node->node) - BaseLineCenter;
     1476              TempVector.ProjectOntoPlane(VirtualNormalVector);
     1477              TempAngle = TempVector.Angle(helper);
     1478              TempVector = (*winner->second->node->node) - BaseLineCenter;
     1479              TempVector.ProjectOntoPlane(VirtualNormalVector);
     1480              if (TempAngle < TempVector.Angle(helper)) {
     1481                TempAngle = NormalVector.Angle(VirtualNormalVector);
    15041482                SmallestAngle = TempAngle;
    15051483                winner = target;
     
    15381516          BTS = new class BoundaryTriangleSet(BLS, TrianglesOnBoundaryCount);
    15391517          BTS->GetCenter(&helper);
    1540           helper.SubtractVector(Center);
    1541           helper.Scale(-1);
     1518          helper -= (*Center);
     1519          helper *= -1;
    15421520          BTS->GetNormalVector(helper);
    15431521          TrianglesOnBoundary.insert(TrianglePair(TrianglesOnBoundaryCount, BTS));
     
    15961574      Log() << Verbose(0) << "We have an intersection at " << Intersection << "." << endl;
    15971575      // we have the intersection, check whether in- or outside of boundary
    1598       if ((Center->DistanceSquared(Walker->node) - Center->DistanceSquared(&Intersection)) < -MYEPSILON) {
     1576      if ((Center->DistanceSquared(*Walker->node) - Center->DistanceSquared(Intersection)) < -MYEPSILON) {
    15991577        // inside, next!
    16001578        Log() << Verbose(0) << *Walker << " is inside wrt triangle " << *BTS << "." << endl;
     
    16091587          OldPoints[i] = BTS->endpoints[i];
    16101588        }
    1611         Normal.CopyVector(&BTS->NormalVector);
     1589        Normal = BTS->NormalVector;
    16121590        // add Walker to boundary points
    16131591        Log() << Verbose(0) << "Adding " << *Walker << " to BoundaryPoints." << endl;
     
    21192097
    21202098    // construct center of circle
    2121     CircleCenter.CopyVector(BaseLine.endpoints[0]->node->node);
    2122     CircleCenter.AddVector(BaseLine.endpoints[1]->node->node);
    2123     CircleCenter.Scale(0.5);
     2099    CircleCenter = 0.5 * ((*BaseLine.endpoints[0]->node->node) + (*BaseLine.endpoints[1]->node->node));
    21242100
    21252101    // construct normal vector of circle
    2126     CirclePlaneNormal.CopyVector(BaseLine.endpoints[0]->node->node);
    2127     CirclePlaneNormal.SubtractVector(BaseLine.endpoints[1]->node->node);
     2102    CirclePlaneNormal = (*BaseLine.endpoints[0]->node->node) - (*BaseLine.endpoints[1]->node->node);
    21282103
    21292104    double radius = CirclePlaneNormal.NormSquared();
    21302105    double CircleRadius = sqrt(RADIUS*RADIUS - radius/4.);
    21312106
    2132     NormalVector.ProjectOntoPlane(&CirclePlaneNormal);
     2107    NormalVector.ProjectOntoPlane(CirclePlaneNormal);
    21332108    NormalVector.Normalize();
    21342109    ShortestAngle = 2.*M_PI; // This will indicate the quadrant.
    21352110
    2136     SphereCenter.CopyVector(&NormalVector);
    2137     SphereCenter.Scale(CircleRadius);
    2138     SphereCenter.AddVector(&CircleCenter);
     2111    SphereCenter = (CircleRadius * NormalVector) +  CircleCenter;
    21392112    // Now, NormalVector and SphereCenter are two orthonormalized vectors in the plane defined by CirclePlaneNormal (not normalized)
    21402113
     
    23372310
    23382311  // construct center of circle
    2339   CircleCenter.CopyVector(CandidateLine.BaseLine->endpoints[0]->node->node);
    2340   CircleCenter.AddVector(CandidateLine.BaseLine->endpoints[1]->node->node);
    2341   CircleCenter.Scale(0.5);
     2312  CircleCenter = 0.5 * ((*CandidateLine.BaseLine->endpoints[0]->node->node) +
     2313                        (*CandidateLine.BaseLine->endpoints[1]->node->node));
    23422314
    23432315  // construct normal vector of circle
    2344   CirclePlaneNormal.CopyVector(CandidateLine.BaseLine->endpoints[0]->node->node);
    2345   CirclePlaneNormal.SubtractVector(CandidateLine.BaseLine->endpoints[1]->node->node);
     2316  CirclePlaneNormal = (*CandidateLine.BaseLine->endpoints[0]->node->node) -
     2317                      (*CandidateLine.BaseLine->endpoints[1]->node->node);
    23462318
    23472319  // calculate squared radius of circle
    2348   radius = CirclePlaneNormal.ScalarProduct(&CirclePlaneNormal);
     2320  radius = CirclePlaneNormal.ScalarProduct(CirclePlaneNormal);
    23492321  if (radius/4. < RADIUS*RADIUS) {
    23502322    // construct relative sphere center with now known CircleCenter
    2351     RelativeSphereCenter.CopyVector(&T.SphereCenter);
    2352     RelativeSphereCenter.SubtractVector(&CircleCenter);
     2323    RelativeSphereCenter = T.SphereCenter - CircleCenter;
    23532324
    23542325    CircleRadius = RADIUS*RADIUS - radius/4.;
     
    23602331    // construct SearchDirection and an "outward pointer"
    23612332    SearchDirection = Plane(RelativeSphereCenter, CirclePlaneNormal,0).getNormal();
    2362     helper.CopyVector(&CircleCenter);
    2363     helper.SubtractVector(ThirdNode->node);
    2364     if (helper.ScalarProduct(&SearchDirection) < -HULLEPSILON)// ohoh, SearchDirection points inwards!
     2333    helper = CircleCenter - (*ThirdNode->node);
     2334    if (helper.ScalarProduct(SearchDirection) < -HULLEPSILON)// ohoh, SearchDirection points inwards!
    23652335      SearchDirection.Scale(-1.);
    23662336    Log() << Verbose(1) << "INFO: SearchDirection is " << SearchDirection << "." << endl;
    2367     if (fabs(RelativeSphereCenter.ScalarProduct(&SearchDirection)) > HULLEPSILON) {
     2337    if (fabs(RelativeSphereCenter.ScalarProduct(SearchDirection)) > HULLEPSILON) {
    23682338      // rotated the wrong way!
    23692339      eLog() << Verbose(1) << "SearchDirection and RelativeOldSphereCenter are still not orthogonal!" << endl;
     
    25122482    AddTesselationTriangle();
    25132483    BTS->GetCenter(&Center);
    2514     Center.SubtractVector(&CandidateLine.OptCenter);
    2515     BTS->SphereCenter.CopyVector(&CandidateLine.OptCenter);
     2484    Center -= CandidateLine.OptCenter;
     2485    BTS->SphereCenter = CandidateLine.OptCenter;
    25162486    BTS->GetNormalVector(Center);
    25172487
     
    25592529  Vector DistanceToIntersection[2], BaseLine;
    25602530  double distance[2];
    2561   BaseLine.CopyVector(Base->endpoints[1]->node->node);
    2562   BaseLine.SubtractVector(Base->endpoints[0]->node->node);
     2531  BaseLine = (*Base->endpoints[1]->node->node) - (*Base->endpoints[0]->node->node);
    25632532  for (int i=0;i<2;i++) {
    2564     DistanceToIntersection[i].CopyVector(ClosestPoint);
    2565     DistanceToIntersection[i].SubtractVector(Base->endpoints[i]->node->node);
    2566     distance[i] = BaseLine.ScalarProduct(&DistanceToIntersection[i]);
     2533    DistanceToIntersection[i] = (*ClosestPoint) - (*Base->endpoints[i]->node->node);
     2534    distance[i] = BaseLine.ScalarProduct(DistanceToIntersection[i]);
    25672535  }
    25682536  delete(ClosestPoint);
     
    26362604
    26372605  // get the distance vector from Base line to OtherBase line
    2638   Vector Distance;
    2639   Distance.CopyVector(ClosestPoint[1]);
    2640   Distance.SubtractVector(ClosestPoint[0]);
     2606  Vector Distance = (*ClosestPoint[1]) - (*ClosestPoint[0]);
    26412607
    26422608  // calculate volume
     
    26602626    for (TriangleMap::iterator runner = Base->triangles.begin(); runner != Base->triangles.end(); runner++) {
    26612627      Log() << Verbose(1) << "INFO: Adding NormalVector " << runner->second->NormalVector << " of triangle " << *(runner->second) << "." << endl;
    2662       BaseLineNormal.AddVector(&(runner->second->NormalVector));
     2628      BaseLineNormal += (runner->second->NormalVector);
    26632629    }
    26642630    BaseLineNormal.Scale(1./2.);
    26652631
    2666     if (Distance.ScalarProduct(&BaseLineNormal) > MYEPSILON) { // Distance points outwards, hence OtherBase higher than Base -> flip
     2632    if (Distance.ScalarProduct(BaseLineNormal) > MYEPSILON) { // Distance points outwards, hence OtherBase higher than Base -> flip
    26672633      Log() << Verbose(0) << "ACCEPT: Other base line would be higher: Flipping baseline." << endl;
    26682634      // calculate volume summand as a general tetraeder
     
    26992665  for (TriangleMap::iterator runner = Base->triangles.begin(); runner != Base->triangles.end(); runner++) {
    27002666    Log() << Verbose(1) << "INFO: Adding NormalVector " << runner->second->NormalVector << " of triangle " << *(runner->second) << "." << endl;
    2701     BaseLineNormal.AddVector(&(runner->second->NormalVector));
     2667    BaseLineNormal += (runner->second->NormalVector);
    27022668  }
    27032669  BaseLineNormal.Scale(-1./2.); // has to point inside for BoundaryTriangleSet::GetNormalVector()
     
    28402806              double distance, scaleFactor;
    28412807
    2842               OrthogonalizedOben.CopyVector(&Oben);
    2843               aCandidate.CopyVector(a->node);
    2844               aCandidate.SubtractVector(Candidate->node);
    2845               OrthogonalizedOben.ProjectOntoPlane(&aCandidate);
     2808              OrthogonalizedOben = Oben;
     2809              aCandidate = (*a->node) - (*Candidate->node);
     2810              OrthogonalizedOben.ProjectOntoPlane(aCandidate);
    28462811              OrthogonalizedOben.Normalize();
    28472812              distance = 0.5 * aCandidate.Norm();
     
    28492814              OrthogonalizedOben.Scale(scaleFactor);
    28502815
    2851               Center.CopyVector(Candidate->node);
    2852               Center.AddVector(a->node);
    2853               Center.Scale(0.5);
    2854               Center.AddVector(&OrthogonalizedOben);
    2855 
    2856               AngleCheck.CopyVector(&Center);
    2857               AngleCheck.SubtractVector(a->node);
     2816              Center = 0.5 * ((*Candidate->node) + (*a->node));
     2817              Center += OrthogonalizedOben;
     2818
     2819              AngleCheck = Center - (*a->node);
    28582820              norm = aCandidate.Norm();
    28592821              // second point shall have smallest angle with respect to Oben vector
    28602822              if (norm < RADIUS*2.) {
    2861                 angle = AngleCheck.Angle(&Oben);
     2823                angle = AngleCheck.Angle(Oben);
    28622824                if (angle < Storage[0]) {
    28632825                  //Log() << Verbose(1) << "Old values of Storage: %lf %lf \n", Storage[0], Storage[1]);
     
    29352897
    29362898  // construct center of circle
    2937   CircleCenter.CopyVector(CandidateLine.BaseLine->endpoints[0]->node->node);
    2938   CircleCenter.AddVector(CandidateLine.BaseLine->endpoints[1]->node->node);
    2939   CircleCenter.Scale(0.5);
     2899  CircleCenter = 0.5 * ((*CandidateLine.BaseLine->endpoints[0]->node->node) +
     2900                        (*CandidateLine.BaseLine->endpoints[1]->node->node));
    29402901
    29412902  // construct normal vector of circle
    2942   CirclePlaneNormal.CopyVector(CandidateLine.BaseLine->endpoints[0]->node->node);
    2943   CirclePlaneNormal.SubtractVector(CandidateLine.BaseLine->endpoints[1]->node->node);
    2944 
    2945   RelativeOldSphereCenter.CopyVector(&OldSphereCenter);
    2946   RelativeOldSphereCenter.SubtractVector(&CircleCenter);
     2903  CirclePlaneNormal = (*CandidateLine.BaseLine->endpoints[0]->node->node) -
     2904                      (*CandidateLine.BaseLine->endpoints[1]->node->node);
     2905
     2906  RelativeOldSphereCenter = OldSphereCenter - CircleCenter;
    29472907
    29482908  // calculate squared radius TesselPoint *ThirdNode,f circle
     
    29542914
    29552915    // test whether old center is on the band's plane
    2956     if (fabs(RelativeOldSphereCenter.ScalarProduct(&CirclePlaneNormal)) > HULLEPSILON) {
    2957       eLog() << Verbose(1) << "Something's very wrong here: RelativeOldSphereCenter is not on the band's plane as desired by " << fabs(RelativeOldSphereCenter.ScalarProduct(&CirclePlaneNormal)) << "!" << endl;
    2958       RelativeOldSphereCenter.ProjectOntoPlane(&CirclePlaneNormal);
     2916    if (fabs(RelativeOldSphereCenter.ScalarProduct(CirclePlaneNormal)) > HULLEPSILON) {
     2917      eLog() << Verbose(1) << "Something's very wrong here: RelativeOldSphereCenter is not on the band's plane as desired by " << fabs(RelativeOldSphereCenter.ScalarProduct(CirclePlaneNormal)) << "!" << endl;
     2918      RelativeOldSphereCenter.ProjectOntoPlane(CirclePlaneNormal);
    29592919    }
    29602920    radius = RelativeOldSphereCenter.NormSquared();
     
    29642924      // check SearchDirection
    29652925      Log() << Verbose(1) << "INFO: SearchDirection is " << SearchDirection << "." << endl;
    2966       if (fabs(RelativeOldSphereCenter.ScalarProduct(&SearchDirection)) > HULLEPSILON) {  // rotated the wrong way!
     2926      if (fabs(RelativeOldSphereCenter.ScalarProduct(SearchDirection)) > HULLEPSILON) {  // rotated the wrong way!
    29672927        eLog() << Verbose(1) << "SearchDirection and RelativeOldSphereCenter are not orthogonal!" << endl;
    29682928      }
     
    30112971
    30122972                    Log() << Verbose(1) << "INFO: NewNormalVector is " << NewNormalVector << "." << endl;
    3013                     radius = CandidateLine.BaseLine->endpoints[0]->node->node->DistanceSquared(&NewPlaneCenter);
     2973                    radius = CandidateLine.BaseLine->endpoints[0]->node->node->DistanceSquared(NewPlaneCenter);
    30142974                    Log() << Verbose(1) << "INFO: CircleCenter is at " << CircleCenter << ", CirclePlaneNormal is " << CirclePlaneNormal << " with circle radius " << sqrt(CircleRadius) << "." << endl;
    30152975                    Log() << Verbose(1) << "INFO: SearchDirection is " << SearchDirection << "." << endl;
    30162976                    Log() << Verbose(1) << "INFO: Radius of CircumCenterCircle is " << radius << "." << endl;
    30172977                    if (radius < RADIUS*RADIUS) {
    3018                       otherradius = CandidateLine.BaseLine->endpoints[1]->node->node->DistanceSquared(&NewPlaneCenter);
     2978                      otherradius = CandidateLine.BaseLine->endpoints[1]->node->node->DistanceSquared(NewPlaneCenter);
    30192979                      if (fabs(radius - otherradius) > HULLEPSILON) {
    30202980                        eLog() << Verbose(1) << "Distance to center of circumcircle is not the same from each corner of the triangle: " << fabs(radius-otherradius) << endl;
    30212981                      }
    30222982                      // construct both new centers
    3023                       NewSphereCenter.CopyVector(&NewPlaneCenter);
    3024                       OtherNewSphereCenter.CopyVector(&NewPlaneCenter);
    3025                       helper.CopyVector(&NewNormalVector);
    3026                       helper.Scale(sqrt(RADIUS*RADIUS - radius));
     2983                      NewSphereCenter = NewPlaneCenter;
     2984                      OtherNewSphereCenter = NewPlaneCenter;
     2985                      helper = sqrt(RADIUS*RADIUS - radius) * NewNormalVector;
    30272986                      Log() << Verbose(2) << "INFO: Distance of NewPlaneCenter " << NewPlaneCenter << " to either NewSphereCenter is " << helper.Norm() << " of vector " << helper << " with sphere radius " << RADIUS << "." << endl;
    3028                       NewSphereCenter.AddVector(&helper);
     2987                      NewSphereCenter += helper;
    30292988                      Log() << Verbose(2) << "INFO: NewSphereCenter is at " << NewSphereCenter << "." << endl;
    30302989                      // OtherNewSphereCenter is created by the same vector just in the other direction
    30312990                      helper.Scale(-1.);
    3032                       OtherNewSphereCenter.AddVector(&helper);
     2991                      OtherNewSphereCenter += helper;
    30332992                      Log() << Verbose(2) << "INFO: OtherNewSphereCenter is at " << OtherNewSphereCenter << "." << endl;
    30342993
     
    30413000                      if (CandidateLine.ShortestAngle > (alpha - HULLEPSILON)) {
    30423001                        if (fabs(alpha - Otheralpha) > MYEPSILON) {
    3043                           CandidateLine.OptCenter.CopyVector(&NewSphereCenter);
    3044                           CandidateLine.OtherOptCenter.CopyVector(&OtherNewSphereCenter);
     3002                          CandidateLine.OptCenter = NewSphereCenter;
     3003                          CandidateLine.OtherOptCenter = OtherNewSphereCenter;
    30453004                        } else {
    3046                           CandidateLine.OptCenter.CopyVector(&OtherNewSphereCenter);
    3047                           CandidateLine.OtherOptCenter.CopyVector(&NewSphereCenter);
     3005                          CandidateLine.OptCenter = OtherNewSphereCenter;
     3006                          CandidateLine.OtherOptCenter = NewSphereCenter;
    30483007                        }
    30493008                        // if there is an equal candidate, add it to the list without clearing the list
     
    31683127            FindPoint = PointsOnBoundary.find((*Runner)->nr);
    31693128            if (FindPoint != PointsOnBoundary.end()) {
    3170               points->insert(DistanceToPointPair (FindPoint->second->node->node->DistanceSquared(x), FindPoint->second) );
     3129              points->insert(DistanceToPointPair (FindPoint->second->node->node->DistanceSquared(*x), FindPoint->second) );
    31713130              Log() << Verbose(1) << "INFO: Putting " << *FindPoint->second << " into the list." << endl;
    31723131            }
     
    32123171    for (LineMap::iterator LineRunner = Runner->second->lines.begin(); LineRunner != Runner->second->lines.end(); LineRunner++) {
    32133172      // calculate closest point on line to desired point
    3214       helper.CopyVector((LineRunner->second)->endpoints[0]->node->node);
    3215       helper.AddVector((LineRunner->second)->endpoints[1]->node->node);
    3216       helper.Scale(0.5);
    3217       Center.CopyVector(x);
    3218       Center.SubtractVector(&helper);
    3219       BaseLine.CopyVector((LineRunner->second)->endpoints[0]->node->node);
    3220       BaseLine.SubtractVector((LineRunner->second)->endpoints[1]->node->node);
    3221       Center.ProjectOntoPlane(&BaseLine);
     3173      helper = 0.5 * ((*(LineRunner->second)->endpoints[0]->node->node) +
     3174                      (*(LineRunner->second)->endpoints[1]->node->node));
     3175      Center = (*x) - helper;
     3176      BaseLine = (*(LineRunner->second)->endpoints[0]->node->node) -
     3177                 (*(LineRunner->second)->endpoints[1]->node->node);
     3178      Center.ProjectOntoPlane(BaseLine);
    32223179      const double distance = Center.NormSquared();
    32233180      if ((ClosestLine == NULL) || (distance < MinDistance)) {
    32243181        // additionally calculate intersection on line (whether it's on the line section or not)
    3225         helper.CopyVector(x);
    3226         helper.SubtractVector((LineRunner->second)->endpoints[0]->node->node);
    3227         helper.SubtractVector(&Center);
    3228         const double lengthA = helper.ScalarProduct(&BaseLine);
    3229         helper.CopyVector(x);
    3230         helper.SubtractVector((LineRunner->second)->endpoints[1]->node->node);
    3231         helper.SubtractVector(&Center);
    3232         const double lengthB = helper.ScalarProduct(&BaseLine);
     3182        helper = (*x) - (*(LineRunner->second)->endpoints[0]->node->node) - Center;
     3183        const double lengthA = helper.ScalarProduct(BaseLine);
     3184        helper = (*x) - (*(LineRunner->second)->endpoints[1]->node->node) - Center;
     3185        const double lengthB = helper.ScalarProduct(BaseLine);
    32333186        if (lengthB*lengthA < 0) {  // if have different sign
    32343187          ClosestLine = LineRunner->second;
     
    32803233    for (LineMap::iterator LineRunner = Runner->second->lines.begin(); LineRunner != Runner->second->lines.end(); LineRunner++) {
    32813234
    3282       BaseLine.CopyVector((LineRunner->second)->endpoints[0]->node->node);
    3283       BaseLine.SubtractVector((LineRunner->second)->endpoints[1]->node->node);
     3235      BaseLine = (*(LineRunner->second)->endpoints[0]->node->node) -
     3236                 (*(LineRunner->second)->endpoints[1]->node->node);
    32843237      const double lengthBase = BaseLine.NormSquared();
    32853238
    3286       BaseLineIntersection.CopyVector(x);
    3287       BaseLineIntersection.SubtractVector((LineRunner->second)->endpoints[0]->node->node);
     3239      BaseLineIntersection = (*x) - (*(LineRunner->second)->endpoints[0]->node->node);
    32883240      const double lengthEndA = BaseLineIntersection.NormSquared();
    32893241
    3290       BaseLineIntersection.CopyVector(x);
    3291       BaseLineIntersection.SubtractVector((LineRunner->second)->endpoints[1]->node->node);
     3242      BaseLineIntersection = (*x) - (*(LineRunner->second)->endpoints[1]->node->node);
    32923243      const double lengthEndB = BaseLineIntersection.NormSquared();
    32933244
     
    33073258      } else { // intersection is closer, calculate
    33083259        // calculate closest point on line to desired point
    3309         BaseLineIntersection.CopyVector(x);
    3310         BaseLineIntersection.SubtractVector((LineRunner->second)->endpoints[1]->node->node);
    3311         Center.CopyVector(&BaseLineIntersection);
    3312         Center.ProjectOntoPlane(&BaseLine);
    3313         BaseLineIntersection.SubtractVector(&Center);
     3260        BaseLineIntersection = (*x) - (*(LineRunner->second)->endpoints[1]->node->node);
     3261        Center = BaseLineIntersection;
     3262        Center.ProjectOntoPlane(BaseLine);
     3263        BaseLineIntersection -= Center;
    33143264        const double distance = BaseLineIntersection.NormSquared();
    33153265        if (Center.NormSquared() > BaseLine.NormSquared()) {
     
    33633313  for (TriangleList::iterator Runner = triangles->begin(); Runner != triangles->end(); Runner++) {
    33643314    (*Runner)->GetCenter(&Center);
    3365     helper.CopyVector(x);
    3366     helper.SubtractVector(&Center);
    3367     const double Alignment = helper.Angle(&(*Runner)->NormalVector);
     3315    helper = (*x) - Center;
     3316    const double Alignment = helper.Angle((*Runner)->NormalVector);
    33683317    if (Alignment < MinAlignment) {
    33693318      result = *Runner;
     
    34273376  triangle->GetCenter(&Center);
    34283377  Log() << Verbose(2) << "INFO: Central point of the triangle is " << Center << "." << endl;
    3429   DistanceToCenter.CopyVector(&Center);
    3430   DistanceToCenter.SubtractVector(&Point);
     3378  DistanceToCenter = Center - Point;
    34313379  Log() << Verbose(2) << "INFO: Vector from point to test to center is " << DistanceToCenter << "." << endl;
    34323380
    34333381  // check whether we are on boundary
    3434   if (fabs(DistanceToCenter.ScalarProduct(&triangle->NormalVector)) < MYEPSILON) {
     3382  if (fabs(DistanceToCenter.ScalarProduct(triangle->NormalVector)) < MYEPSILON) {
    34353383    // calculate whether inside of triangle
    3436     DistanceToCenter.CopyVector(&Point);
    3437     Center.CopyVector(&Point);
    3438     Center.SubtractVector(&triangle->NormalVector); // points towards MolCenter
    3439     DistanceToCenter.AddVector(&triangle->NormalVector); // points outside
     3384    DistanceToCenter = Point + triangle->NormalVector; // points outside
     3385    Center = Point - triangle->NormalVector; // points towards MolCenter
    34403386    Log() << Verbose(1) << "INFO: Calling Intersection with " << Center << " and " << DistanceToCenter << "." << endl;
    34413387    if (triangle->GetIntersectionInsideTriangle(&Center, &DistanceToCenter, &Intersection)) {
     
    34523398
    34533399    // then check direction to boundary
    3454     if (DistanceToCenter.ScalarProduct(&triangle->NormalVector) > MYEPSILON) {
     3400    if (DistanceToCenter.ScalarProduct(triangle->NormalVector) > MYEPSILON) {
    34553401      Log() << Verbose(1) << Point << " is an inner point, " << distance << " below surface." << endl;
    34563402      return -distance;
     
    35683514  if ((triangles != NULL) && (!triangles->empty())) {
    35693515    for (TriangleList::iterator Runner = triangles->begin(); Runner != triangles->end(); Runner++)
    3570       PlaneNormal.AddVector(&(*Runner)->NormalVector);
     3516      PlaneNormal += (*Runner)->NormalVector;
    35713517  } else {
    35723518    eLog() << Verbose(0) << "Could not find any triangles for point " << *Point << "." << endl;
     
    35793525  // construct one orthogonal vector
    35803526  if (Reference != NULL) {
    3581     AngleZero.CopyVector(Reference);
    3582     AngleZero.SubtractVector(Point->node);
    3583     AngleZero.ProjectOntoPlane(&PlaneNormal);
     3527    AngleZero = (*Reference) - (*Point->node);
     3528    AngleZero.ProjectOntoPlane(PlaneNormal);
    35843529  }
    35853530  if ((Reference == NULL) || (AngleZero.NormSquared() < MYEPSILON )) {
    35863531    Log() << Verbose(1) << "Using alternatively " << *(*SetOfNeighbours->begin())->node << " as angle 0 referencer." << endl;
    3587     AngleZero.CopyVector((*SetOfNeighbours->begin())->node);
    3588     AngleZero.SubtractVector(Point->node);
    3589     AngleZero.ProjectOntoPlane(&PlaneNormal);
     3532    AngleZero = (*(*SetOfNeighbours->begin())->node) - (*Point->node);
     3533    AngleZero.ProjectOntoPlane(PlaneNormal);
    35903534    if (AngleZero.NormSquared() < MYEPSILON) {
    35913535      eLog() << Verbose(0) << "CRITIAL: AngleZero is 0 even with alternative reference. The algorithm has to be changed here!" << endl;
     
    36023546  // go through all connected points and calculate angle
    36033547  for (TesselPointSet::iterator listRunner = SetOfNeighbours->begin(); listRunner != SetOfNeighbours->end(); listRunner++) {
    3604     helper.CopyVector((*listRunner)->node);
    3605     helper.SubtractVector(Point->node);
    3606     helper.ProjectOntoPlane(&PlaneNormal);
     3548    helper = (*(*listRunner)->node) - (*Point->node);
     3549    helper.ProjectOntoPlane(PlaneNormal);
    36073550    double angle = GetAngle(helper, AngleZero, OrthogonalVector);
    36083551    Log() << Verbose(0) << "INFO: Calculated angle is " << angle << " for point " << **listRunner << "." << endl;
     
    36713614    TesselB++;
    36723615    TesselC++;
    3673     PlaneNormal.AddVector(&helper);
     3616    PlaneNormal += helper;
    36743617  }
    36753618  //Log() << Verbose(0) << "Summed vectors " << center << "; number of points " << connectedPoints.size()
     
    36863629  // construct one orthogonal vector
    36873630  if (Reference != NULL) {
    3688     AngleZero.CopyVector(Reference);
    3689     AngleZero.SubtractVector(Point->node);
    3690     AngleZero.ProjectOntoPlane(&PlaneNormal);
     3631    AngleZero = (*Reference) - (*Point->node);
     3632    AngleZero.ProjectOntoPlane(PlaneNormal);
    36913633  }
    36923634  if ((Reference == NULL) || (AngleZero.NormSquared() < MYEPSILON )) {
    36933635    Log() << Verbose(1) << "Using alternatively " << *(*SetOfNeighbours->begin())->node << " as angle 0 referencer." << endl;
    3694     AngleZero.CopyVector((*SetOfNeighbours->begin())->node);
    3695     AngleZero.SubtractVector(Point->node);
    3696     AngleZero.ProjectOntoPlane(&PlaneNormal);
     3636    AngleZero = (*(*SetOfNeighbours->begin())->node) - (*Point->node);
     3637    AngleZero.ProjectOntoPlane(PlaneNormal);
    36973638    if (AngleZero.NormSquared() < MYEPSILON) {
    36983639      eLog() << Verbose(0) << "CRITIAL: AngleZero is 0 even with alternative reference. The algorithm has to be changed here!" << endl;
     
    37103651  pair <map<double, TesselPoint*>::iterator, bool > InserterTest;
    37113652  for (TesselPointSet::iterator listRunner = SetOfNeighbours->begin(); listRunner != SetOfNeighbours->end(); listRunner++) {
    3712     helper.CopyVector((*listRunner)->node);
    3713     helper.SubtractVector(Point->node);
    3714     helper.ProjectOntoPlane(&PlaneNormal);
     3653    helper = (*(*listRunner)->node) - (*Point->node);
     3654    helper.ProjectOntoPlane(PlaneNormal);
    37153655    double angle = GetAngle(helper, AngleZero, OrthogonalVector);
    37163656    if (angle > M_PI) // the correction is of no use here (and not desired)
     
    39593899
    39603900  // copy old location for the volume
    3961   OldPoint.CopyVector(point->node->node);
     3901  OldPoint = (*point->node->node);
    39623902
    39633903  // get list of connected points
     
    39873927  for (TriangleMap::iterator Runner = Candidates.begin(); Runner != Candidates.end(); Runner++) {
    39883928    Log() << Verbose(1) << "INFO: Removing triangle " << *(Runner->second) << "." << endl;
    3989     NormalVector.SubtractVector(&Runner->second->NormalVector); // has to point inward
     3929    NormalVector -= Runner->second->NormalVector; // has to point inward
    39903930    RemoveTesselationTriangle(Runner->second);
    39913931    count++;
     
    40233963          StartNode--;
    40243964          //Log() << Verbose(3) << "INFO: StartNode is " << **StartNode << "." << endl;
    4025           Point.CopyVector((*StartNode)->node);
    4026           Point.SubtractVector((*MiddleNode)->node);
     3965          Point = (*(*StartNode)->node) - (*(*MiddleNode)->node);
    40273966          StartNode = MiddleNode;
    40283967          StartNode++;
     
    40303969            StartNode = connectedPath->begin();
    40313970          //Log() << Verbose(3) << "INFO: EndNode is " << **StartNode << "." << endl;
    4032           Reference.CopyVector((*StartNode)->node);
    4033           Reference.SubtractVector((*MiddleNode)->node);
    4034           OrthogonalVector.CopyVector((*MiddleNode)->node);
    4035           OrthogonalVector.SubtractVector(&OldPoint);
     3971          Reference = (*(*StartNode)->node) - (*(*MiddleNode)->node);
     3972          OrthogonalVector = (*(*MiddleNode)->node) - OldPoint;
    40363973          OrthogonalVector.MakeNormalTo(Reference);
    40373974          angle = GetAngle(Point, Reference, OrthogonalVector);
     
    45024439  class BoundaryLineSet *BestLine = NULL;
    45034440  for (LineMap::iterator Runner = NearestBoundaryPoint->lines.begin(); Runner != NearestBoundaryPoint->lines.end(); Runner++) {
    4504     BaseLine.CopyVector(Runner->second->endpoints[0]->node->node);
    4505     BaseLine.SubtractVector(Runner->second->endpoints[1]->node->node);
    4506     CenterToPoint.CopyVector(Runner->second->endpoints[0]->node->node);
    4507     CenterToPoint.AddVector(Runner->second->endpoints[1]->node->node);
    4508     CenterToPoint.Scale(0.5);
    4509     CenterToPoint.SubtractVector(point->node);
    4510     angle = CenterToPoint.Angle(&BaseLine);
     4441    BaseLine = (*Runner->second->endpoints[0]->node->node) -
     4442               (*Runner->second->endpoints[1]->node->node);
     4443    CenterToPoint = 0.5 * ((*Runner->second->endpoints[0]->node->node) +
     4444                           (*Runner->second->endpoints[1]->node->node));
     4445    CenterToPoint -= (*point->node);
     4446    angle = CenterToPoint.Angle(BaseLine);
    45114447    if (fabs(angle - M_PI/2.) < fabs(BestAngle - M_PI/2.)) {
    45124448      BestAngle = angle;
     
    46724608      for (map < int, Vector *>::iterator VectorRunner = VectorWalker; VectorRunner != TriangleVectors.end(); VectorRunner++)
    46734609        if (VectorWalker != VectorRunner) { // skip equals
    4674           const double SCP = VectorWalker->second->ScalarProduct(VectorRunner->second);  // ScalarProduct should result in -1. for degenerated triangles
     4610          const double SCP = VectorWalker->second->ScalarProduct(*VectorRunner->second);  // ScalarProduct should result in -1. for degenerated triangles
    46754611          Log() << Verbose(1) << "Checking " << *VectorWalker->second<< " against " << *VectorRunner->second << ": " << SCP << endl;
    46764612          if (fabs(SCP + 1.) < ParallelEpsilon) {
     
    47584694    TriangleSet::iterator TriangleWalker = T->begin();  // is the inner iterator
    47594695    /// 4a. Get NormalVector for one side (this is "front")
    4760     NormalVector.CopyVector(&(*TriangleWalker)->NormalVector);
     4696    NormalVector = (*TriangleWalker)->NormalVector;
    47614697    Log() << Verbose(1) << "\"front\" defining triangle is " << **TriangleWalker << " and Normal vector of \"front\" side is " << NormalVector << endl;
    47624698    TriangleWalker++;
     
    47694705      TriangleSprinter++;
    47704706      Log() << Verbose(1) << "Current triangle to test for removal: " << *triangle << endl;
    4771       if (triangle->NormalVector.ScalarProduct(&NormalVector) < 0) { // if from other side, then delete and remove from list
     4707      if (triangle->NormalVector.ScalarProduct(NormalVector) < 0) { // if from other side, then delete and remove from list
    47724708        Log() << Verbose(1) << " Removing ... " << endl;
    47734709        TriangleNrs.push(triangle->Nr);
     
    47914727      AddTesselationTriangle(); // ... and add
    47924728      TriangleNrs.pop();
    4793       BTS->NormalVector.CopyVector(&(*TriangleWalker)->NormalVector);
    4794       BTS->NormalVector.Scale(-1.);
     4729      BTS->NormalVector = -1 * (*TriangleWalker)->NormalVector;
    47954730      TriangleWalker++;
    47964731    }
Note: See TracChangeset for help on using the changeset viewer.