Changes in src/tesselationhelpers.cpp [952f38:d74077]
- File:
-
- 1 edited
-
src/tesselationhelpers.cpp (modified) (18 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/tesselationhelpers.cpp
r952f38 rd74077 10 10 #include <fstream> 11 11 12 #include "Helpers/Info.hpp" 12 #include "BoundaryLineSet.hpp" 13 #include "BoundaryPointSet.hpp" 14 #include "BoundaryPolygonSet.hpp" 15 #include "BoundaryTriangleSet.hpp" 16 #include "CandidateForTesselation.hpp" 17 #include "info.hpp" 13 18 #include "linkedcell.hpp" 14 #include " LinearAlgebra/linearsystemofequations.hpp"15 #include " Helpers/Log.hpp"19 #include "linearsystemofequations.hpp" 20 #include "log.hpp" 16 21 #include "tesselation.hpp" 17 22 #include "tesselationhelpers.hpp" 18 #include " LinearAlgebra/Vector.hpp"19 #include "Line arAlgebra/Line.hpp"23 #include "vector.hpp" 24 #include "Line.hpp" 20 25 #include "vector_ops.hpp" 21 #include " Helpers/Verbose.hpp"22 #include " LinearAlgebra/Plane.hpp"23 #include " LinearAlgebra/Matrix.hpp"26 #include "verbose.hpp" 27 #include "Plane.hpp" 28 #include "Matrix.hpp" 24 29 25 30 void GetSphere(Vector * const center, const Vector &a, const Vector &b, const Vector &c, const double RADIUS) … … 144 149 * \param *c third point 145 150 */ 146 void GetCenterofCircumcircle(Vector * constCenter, const Vector &a, const Vector &b, const Vector &c)151 void GetCenterofCircumcircle(Vector &Center, const Vector &a, const Vector &b, const Vector &c) 147 152 { 148 153 Info FunctionInfo(__func__); … … 156 161 helper[2] = SideC.NormSquared()*(SideA.NormSquared()+SideB.NormSquared() - SideC.NormSquared()); 157 162 158 Center ->Zero();159 *Center += helper[0] * a;160 *Center += helper[1] * b;161 *Center += helper[2] * c;162 Center ->Scale(1./(helper[0]+helper[1]+helper[2]));163 Log() << Verbose(1) << "INFO: Center (2nd algo) is at " << *Center << "." << endl;163 Center.Zero(); 164 Center += helper[0] * a; 165 Center += helper[1] * b; 166 Center += helper[2] * c; 167 Center.Scale(1./(helper[0]+helper[1]+helper[2])); 168 Log() << Verbose(1) << "INFO: Center (2nd algo) is at " << Center << "." << endl; 164 169 }; 165 170 … … 388 393 * @return point which is second closest to the provided one 389 394 */ 390 TesselPoint* FindSecondClosestTesselPoint(const Vector *Point, const LinkedCell* const LC)395 TesselPoint* FindSecondClosestTesselPoint(const Vector& Point, const LinkedCell* const LC) 391 396 { 392 397 Info FunctionInfo(__func__); … … 412 417 if (List != NULL) { 413 418 for (LinkedCell::LinkedNodes::const_iterator Runner = List->begin(); Runner != List->end(); Runner++) { 414 helper = ( *Point) - (*(*Runner)->node);419 helper = (Point) - ((*Runner)->getPosition()); 415 420 double currentNorm = helper. Norm(); 416 421 if (currentNorm < distance) { … … 441 446 * @return point which is closest to the provided one, NULL if none found 442 447 */ 443 TesselPoint* FindClosestTesselPoint(const Vector *Point, TesselPoint *&SecondPoint, const LinkedCell* const LC)448 TesselPoint* FindClosestTesselPoint(const Vector& Point, TesselPoint *&SecondPoint, const LinkedCell* const LC) 444 449 { 445 450 Info FunctionInfo(__func__); … … 465 470 if (List != NULL) { 466 471 for (LinkedCell::LinkedNodes::const_iterator Runner = List->begin(); Runner != List->end(); Runner++) { 467 helper = ( *Point) - (*(*Runner)->node);472 helper = (Point) - ((*Runner)->getPosition()); 468 473 double currentNorm = helper.NormSquared(); 469 474 if (currentNorm < distance) { … … 503 508 Info FunctionInfo(__func__); 504 509 // construct the plane of the two baselines (i.e. take both their directional vectors) 505 Vector Baseline = ( *Base->endpoints[1]->node->node) - (*Base->endpoints[0]->node->node);506 Vector OtherBaseline = ( *OtherBase->endpoints[1]->node->node) - (*OtherBase->endpoints[0]->node->node);510 Vector Baseline = (Base->endpoints[1]->node->getPosition()) - (Base->endpoints[0]->node->getPosition()); 511 Vector OtherBaseline = (OtherBase->endpoints[1]->node->getPosition()) - (OtherBase->endpoints[0]->node->getPosition()); 507 512 Vector Normal = Baseline; 508 513 Normal.VectorProduct(OtherBaseline); … … 511 516 512 517 // project one offset point of OtherBase onto this plane (and add plane offset vector) 513 Vector NewOffset = ( *OtherBase->endpoints[0]->node->node) - (*Base->endpoints[0]->node->node);518 Vector NewOffset = (OtherBase->endpoints[0]->node->getPosition()) - (Base->endpoints[0]->node->getPosition()); 514 519 NewOffset.ProjectOntoPlane(Normal); 515 NewOffset += ( *Base->endpoints[0]->node->node);520 NewOffset += (Base->endpoints[0]->node->getPosition()); 516 521 Vector NewDirection = NewOffset + OtherBaseline; 517 522 518 523 // calculate the intersection between this projected baseline and Base 519 524 Vector *Intersection = new Vector; 520 Line line1 = makeLineThrough( *(Base->endpoints[0]->node->node),*(Base->endpoints[1]->node->node));525 Line line1 = makeLineThrough((Base->endpoints[0]->node->getPosition()),(Base->endpoints[1]->node->getPosition())); 521 526 Line line2 = makeLineThrough(NewOffset, NewDirection); 522 527 *Intersection = line1.getIntersection(line2); 523 Normal = (*Intersection) - ( *Base->endpoints[0]->node->node);528 Normal = (*Intersection) - (Base->endpoints[0]->node->getPosition()); 524 529 DoLog(1) && (Log() << Verbose(1) << "Found closest point on " << *Base << " at " << *Intersection << ", factor in line is " << fabs(Normal.ScalarProduct(Baseline)/Baseline.NormSquared()) << "." << endl); 525 530 … … 566 571 *vrmlfile << "Sphere {" << endl << " "; // 2 is sphere type 567 572 for (i=0;i<NDIM;i++) 568 *vrmlfile << Walker-> node->at(i)-center->at(i) << " ";573 *vrmlfile << Walker->at(i)-center->at(i) << " "; 569 574 *vrmlfile << "\t0.1\t1. 1. 1." << endl; // radius 0.05 and white as colour 570 575 cloud->GoToNext(); … … 576 581 for (i=0;i<3;i++) { // print each node 577 582 for (int j=0;j<NDIM;j++) // and for each node all NDIM coordinates 578 *vrmlfile << TriangleRunner->second->endpoints[i]->node-> node->at(j)-center->at(j) << " ";583 *vrmlfile << TriangleRunner->second->endpoints[i]->node->at(j)-center->at(j) << " "; 579 584 *vrmlfile << "\t"; 580 585 } … … 603 608 Vector *center = cloud->GetCenter(); 604 609 // make the circumsphere's center absolute again 605 Vector helper = (1./3.) * (( *Tess->LastTriangle->endpoints[0]->node->node) +606 ( *Tess->LastTriangle->endpoints[1]->node->node) +607 ( *Tess->LastTriangle->endpoints[2]->node->node));610 Vector helper = (1./3.) * ((Tess->LastTriangle->endpoints[0]->node->getPosition()) + 611 (Tess->LastTriangle->endpoints[1]->node->getPosition()) + 612 (Tess->LastTriangle->endpoints[2]->node->getPosition())); 608 613 helper -= (*center); 609 614 // and add to file plus translucency object … … 638 643 *rasterfile << "2" << endl << " "; // 2 is sphere type 639 644 for (int j=0;j<NDIM;j++) { // and for each node all NDIM coordinates 640 const double tmp = Walker-> node->at(j)-center->at(j);645 const double tmp = Walker->at(j)-center->at(j); 641 646 *rasterfile << ((fabs(tmp) < MYEPSILON) ? 0 : tmp) << " "; 642 647 } … … 651 656 for (i=0;i<3;i++) { // print each node 652 657 for (int j=0;j<NDIM;j++) { // and for each node all NDIM coordinates 653 const double tmp = TriangleRunner->second->endpoints[i]->node-> node->at(j)-center->at(j);658 const double tmp = TriangleRunner->second->endpoints[i]->node->at(j)-center->at(j); 654 659 *rasterfile << ((fabs(tmp) < MYEPSILON) ? 0 : tmp) << " "; 655 660 } … … 705 710 LookupList[Walker->nr] = Counter++; 706 711 for (int i=0;i<NDIM;i++) { 707 const double tmp = Walker-> node->at(i);712 const double tmp = Walker->at(i); 708 713 *tecplot << ((fabs(tmp) < MYEPSILON) ? 0 : tmp) << " "; 709 714 } … … 754 759 TriangleSet *triangles = TesselStruct->GetAllTriangles(PointRunner->second); 755 760 for (TriangleSet::iterator TriangleRunner = triangles->begin(); TriangleRunner != triangles->end(); ++TriangleRunner) { 756 totalarea += CalculateAreaofGeneralTriangle( *(*TriangleRunner)->endpoints[0]->node->node, *(*TriangleRunner)->endpoints[1]->node->node, *(*TriangleRunner)->endpoints[2]->node->node);761 totalarea += CalculateAreaofGeneralTriangle((*TriangleRunner)->endpoints[0]->node->getPosition() , (*TriangleRunner)->endpoints[1]->node->getPosition() , (*TriangleRunner)->endpoints[2]->node->getPosition()); 757 762 } 758 763 ConcavityPerLine *= totalarea; … … 763 768 line = (*TriangleRunner)->GetThirdLine(PointRunner->second); 764 769 triangle = line->GetOtherTriangle(*TriangleRunner); 765 area = CalculateAreaofGeneralTriangle( *triangle->endpoints[0]->node->node, *triangle->endpoints[1]->node->node, *triangle->endpoints[2]->node->node);766 area += CalculateAreaofGeneralTriangle( *(*TriangleRunner)->endpoints[0]->node->node, *(*TriangleRunner)->endpoints[1]->node->node, *(*TriangleRunner)->endpoints[2]->node->node);770 area = CalculateAreaofGeneralTriangle(triangle->endpoints[0]->node->getPosition() , triangle->endpoints[1]->node->getPosition() , triangle->endpoints[2]->node->getPosition()); 771 area += CalculateAreaofGeneralTriangle((*TriangleRunner)->endpoints[0]->node->getPosition() , (*TriangleRunner)->endpoints[1]->node->getPosition() , (*TriangleRunner)->endpoints[2]->node->getPosition()); 767 772 area *= -line->CalculateConvexity(); 768 773 if (area > 0) … … 797 802 distance = 0.; 798 803 for (TriangleMap::const_iterator TriangleRunner = Convex->TrianglesOnBoundary.begin(); TriangleRunner != Convex->TrianglesOnBoundary.end(); TriangleRunner++) { 799 const double CurrentDistance = Convex->GetDistanceSquaredToTriangle( *PointRunner->second->node->node, TriangleRunner->second);804 const double CurrentDistance = Convex->GetDistanceSquaredToTriangle(PointRunner->second->node->getPosition() , TriangleRunner->second); 800 805 if (CurrentDistance < distance) 801 806 distance = CurrentDistance;
Note:
See TracChangeset
for help on using the changeset viewer.
