Changeset 8cbb97 for src/tesselationhelpers.cpp
- Timestamp:
- Apr 29, 2010, 1:55:21 PM (15 years ago)
- Branches:
- Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
- Children:
- d79639
- Parents:
- 632bc3 (diff), 753f02 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/tesselationhelpers.cpp
r632bc3 r8cbb97 14 14 #include "tesselationhelpers.hpp" 15 15 #include "vector.hpp" 16 #include "vector_ops.hpp" 16 17 #include "verbose.hpp" 17 18 … … 53 54 54 55 for(int i=0;i<3;i++) { 55 gsl_matrix_set(A, i, 0, a .x[i]);56 gsl_matrix_set(A, i, 1, b .x[i]);57 gsl_matrix_set(A, i, 2, c .x[i]);56 gsl_matrix_set(A, i, 0, a[i]); 57 gsl_matrix_set(A, i, 1, b[i]); 58 gsl_matrix_set(A, i, 2, c[i]); 58 59 } 59 60 m11 = DetGet(A, 1); 60 61 61 62 for(int i=0;i<3;i++) { 62 gsl_matrix_set(A, i, 0, a .x[i]*a.x[i] + b.x[i]*b.x[i] + c.x[i]*c.x[i]);63 gsl_matrix_set(A, i, 1, b .x[i]);64 gsl_matrix_set(A, i, 2, c .x[i]);63 gsl_matrix_set(A, i, 0, a[i]*a[i] + b[i]*b[i] + c[i]*c[i]); 64 gsl_matrix_set(A, i, 1, b[i]); 65 gsl_matrix_set(A, i, 2, c[i]); 65 66 } 66 67 m12 = DetGet(A, 1); 67 68 68 69 for(int i=0;i<3;i++) { 69 gsl_matrix_set(A, i, 0, a .x[i]*a.x[i] + b.x[i]*b.x[i] + c.x[i]*c.x[i]);70 gsl_matrix_set(A, i, 1, a .x[i]);71 gsl_matrix_set(A, i, 2, c .x[i]);70 gsl_matrix_set(A, i, 0, a[i]*a[i] + b[i]*b[i] + c[i]*c[i]); 71 gsl_matrix_set(A, i, 1, a[i]); 72 gsl_matrix_set(A, i, 2, c[i]); 72 73 } 73 74 m13 = DetGet(A, 1); 74 75 75 76 for(int i=0;i<3;i++) { 76 gsl_matrix_set(A, i, 0, a .x[i]*a.x[i] + b.x[i]*b.x[i] + c.x[i]*c.x[i]);77 gsl_matrix_set(A, i, 1, a .x[i]);78 gsl_matrix_set(A, i, 2, b .x[i]);77 gsl_matrix_set(A, i, 0, a[i]*a[i] + b[i]*b[i] + c[i]*c[i]); 78 gsl_matrix_set(A, i, 1, a[i]); 79 gsl_matrix_set(A, i, 2, b[i]); 79 80 } 80 81 m14 = DetGet(A, 1); … … 83 84 DoeLog(1) && (eLog()<< Verbose(1) << "three points are colinear." << endl); 84 85 85 center-> x[0]= 0.5 * m12/ m11;86 center-> x[1]= -0.5 * m13/ m11;87 center-> x[2]= 0.5 * m14/ m11;88 89 if (fabs(a.Distance( center) - RADIUS) > MYEPSILON)90 DoeLog(1) && (eLog()<< Verbose(1) << "The given center is further way by " << fabs(a.Distance( center) - RADIUS) << " from a than RADIUS." << endl);86 center->at(0) = 0.5 * m12/ m11; 87 center->at(1) = -0.5 * m13/ m11; 88 center->at(2) = 0.5 * m14/ m11; 89 90 if (fabs(a.Distance(*center) - RADIUS) > MYEPSILON) 91 DoeLog(1) && (eLog()<< Verbose(1) << "The given center is further way by " << fabs(a.Distance(*center) - RADIUS) << " from a than RADIUS." << endl); 91 92 92 93 gsl_matrix_free(A); … … 120 121 Vector OtherCenter; 121 122 Center->Zero(); 122 helper.CopyVector(&a); 123 helper.Scale(sin(2.*alpha)); 124 Center->AddVector(&helper); 125 helper.CopyVector(&b); 126 helper.Scale(sin(2.*beta)); 127 Center->AddVector(&helper); 128 helper.CopyVector(&c); 129 helper.Scale(sin(2.*gamma)); 130 Center->AddVector(&helper); 123 helper = sin(2.*alpha) * a; 124 (*Center) += helper; 125 helper = sin(2.*beta) * b; 126 (*Center) += helper; 127 helper = sin(2.*gamma) * c; 128 (*Center) += helper; 131 129 //*Center = a * sin(2.*alpha) + b * sin(2.*beta) + c * sin(2.*gamma) ; 132 130 Center->Scale(1./(sin(2.*alpha) + sin(2.*beta) + sin(2.*gamma))); 133 NewUmkreismittelpunkt->CopyVector(Center);131 (*NewUmkreismittelpunkt) = (*Center); 134 132 DoLog(1) && (Log() << Verbose(1) << "Center of new circumference is " << *NewUmkreismittelpunkt << ".\n"); 135 133 // Here we calculated center of circumscribing circle, using barycentric coordinates 136 134 DoLog(1) && (Log() << Verbose(1) << "Center of circumference is " << *Center << " in direction " << *Direction << ".\n"); 137 135 138 TempNormal.CopyVector(&a); 139 TempNormal.SubtractVector(&b); 140 helper.CopyVector(&a); 141 helper.SubtractVector(&c); 142 TempNormal.VectorProduct(&helper); 136 TempNormal = a - b; 137 helper = a - c; 138 TempNormal.VectorProduct(helper); 143 139 if (fabs(HalfplaneIndicator) < MYEPSILON) 144 140 { 145 if ((TempNormal.ScalarProduct( AlternativeDirection) <0 && AlternativeIndicator >0) || (TempNormal.ScalarProduct(AlternativeDirection) >0 && AlternativeIndicator <0))141 if ((TempNormal.ScalarProduct(*AlternativeDirection) <0 && AlternativeIndicator >0) || (TempNormal.ScalarProduct(*AlternativeDirection) >0 && AlternativeIndicator <0)) 146 142 { 147 TempNormal .Scale(-1);143 TempNormal *= -1; 148 144 } 149 145 } 150 146 else 151 147 { 152 if (((TempNormal.ScalarProduct( Direction)<0) && (HalfplaneIndicator >0)) || ((TempNormal.ScalarProduct(Direction)>0) && (HalfplaneIndicator<0)))148 if (((TempNormal.ScalarProduct(*Direction)<0) && (HalfplaneIndicator >0)) || ((TempNormal.ScalarProduct(*Direction)>0) && (HalfplaneIndicator<0))) 153 149 { 154 TempNormal .Scale(-1);150 TempNormal *= -1; 155 151 } 156 152 } … … 161 157 TempNormal.Scale(Restradius); 162 158 DoLog(1) && (Log() << Verbose(1) << "Shift vector to sphere of circumference is " << TempNormal << ".\n"); 163 164 Center->AddVector(&TempNormal); 159 (*Center) += TempNormal; 165 160 DoLog(1) && (Log() << Verbose(1) << "Center of sphere of circumference is " << *Center << ".\n"); 166 161 GetSphere(&OtherCenter, a, b, c, RADIUS); … … 180 175 Vector helper; 181 176 double alpha, beta, gamma; 182 Vector SideA, SideB, SideC; 183 SideA.CopyVector(b); 184 SideA.SubtractVector(&c); 185 SideB.CopyVector(c); 186 SideB.SubtractVector(&a); 187 SideC.CopyVector(a); 188 SideC.SubtractVector(&b); 189 alpha = M_PI - SideB.Angle(&SideC); 190 beta = M_PI - SideC.Angle(&SideA); 191 gamma = M_PI - SideA.Angle(&SideB); 177 Vector SideA = b - c; 178 Vector SideB = c - a; 179 Vector SideC = a - b; 180 alpha = M_PI - SideB.Angle(SideC); 181 beta = M_PI - SideC.Angle(SideA); 182 gamma = M_PI - SideA.Angle(SideB); 192 183 //Log() << Verbose(1) << "INFO: alpha = " << alpha/M_PI*180. << ", beta = " << beta/M_PI*180. << ", gamma = " << gamma/M_PI*180. << "." << endl; 193 184 if (fabs(M_PI - alpha - beta - gamma) > HULLEPSILON) { … … 196 187 197 188 Center->Zero(); 198 helper.CopyVector(a); 199 helper.Scale(sin(2.*alpha)); 200 Center->AddVector(&helper); 201 helper.CopyVector(b); 202 helper.Scale(sin(2.*beta)); 203 Center->AddVector(&helper); 204 helper.CopyVector(c); 205 helper.Scale(sin(2.*gamma)); 206 Center->AddVector(&helper); 189 helper = sin(2.*alpha) * a; 190 (*Center) += helper; 191 helper = sin(2.*beta) * b; 192 (*Center) += helper; 193 helper = sin(2.*gamma) * c; 194 (*Center) += helper; 207 195 Center->Scale(1./(sin(2.*alpha) + sin(2.*beta) + sin(2.*gamma))); 208 196 }; … … 226 214 Vector helper; 227 215 double radius, alpha; 228 Vector RelativeOldSphereCenter; 229 Vector RelativeNewSphereCenter; 230 231 RelativeOldSphereCenter.CopyVector(&OldSphereCenter); 232 RelativeOldSphereCenter.SubtractVector(&CircleCenter); 233 RelativeNewSphereCenter.CopyVector(&NewSphereCenter); 234 RelativeNewSphereCenter.SubtractVector(&CircleCenter); 235 helper.CopyVector(&RelativeNewSphereCenter); 216 217 Vector RelativeOldSphereCenter = OldSphereCenter - CircleCenter; 218 Vector RelativeNewSphereCenter = NewSphereCenter - CircleCenter; 219 helper = RelativeNewSphereCenter; 236 220 // test whether new center is on the parameter circle's plane 237 if (fabs(helper.ScalarProduct( &CirclePlaneNormal)) > HULLEPSILON) {238 DoeLog(1) && (eLog()<< Verbose(1) << "Something's very wrong here: NewSphereCenter is not on the band's plane as desired by " <<fabs(helper.ScalarProduct( &CirclePlaneNormal)) << "!" << endl);239 helper.ProjectOntoPlane( &CirclePlaneNormal);221 if (fabs(helper.ScalarProduct(CirclePlaneNormal)) > HULLEPSILON) { 222 DoeLog(1) && (eLog()<< Verbose(1) << "Something's very wrong here: NewSphereCenter is not on the band's plane as desired by " <<fabs(helper.ScalarProduct(CirclePlaneNormal)) << "!" << endl); 223 helper.ProjectOntoPlane(CirclePlaneNormal); 240 224 } 241 225 radius = helper.NormSquared(); … … 243 227 if (fabs(radius - CircleRadius) > HULLEPSILON) 244 228 DoeLog(1) && (eLog()<< Verbose(1) << "The projected center of the new sphere has radius " << radius << " instead of " << CircleRadius << "." << endl); 245 alpha = helper.Angle( &RelativeOldSphereCenter);229 alpha = helper.Angle(RelativeOldSphereCenter); 246 230 // make the angle unique by checking the halfplanes/search direction 247 if (helper.ScalarProduct( &SearchDirection) < -HULLEPSILON) // acos is not unique on [0, 2.*M_PI), hence extra check to decide between two half intervals231 if (helper.ScalarProduct(SearchDirection) < -HULLEPSILON) // acos is not unique on [0, 2.*M_PI), hence extra check to decide between two half intervals 248 232 alpha = 2.*M_PI - alpha; 249 233 DoLog(1) && (Log() << Verbose(1) << "INFO: RelativeNewSphereCenter is " << helper << ", RelativeOldSphereCenter is " << RelativeOldSphereCenter << " and resulting angle is " << alpha << "." << endl); 250 radius = helper.Distance( &RelativeOldSphereCenter);251 helper.ProjectOntoPlane( &NormalVector);234 radius = helper.Distance(RelativeOldSphereCenter); 235 helper.ProjectOntoPlane(NormalVector); 252 236 // check whether new center is somewhat away or at least right over the current baseline to prevent intersecting triangles 253 237 if ((radius > HULLEPSILON) || (helper.Norm() < HULLEPSILON)) { … … 279 263 struct Intersection *I = (struct Intersection *)params; 280 264 Vector intersection; 281 Vector SideA,SideB,HeightA, HeightB;282 265 for (int i=0;i<NDIM;i++) 283 intersection.x[i] = gsl_vector_get(x, i); 284 285 SideA.CopyVector(&(I->x1)); 286 SideA.SubtractVector(&I->x2); 287 HeightA.CopyVector(&intersection); 288 HeightA.SubtractVector(&I->x1); 289 HeightA.ProjectOntoPlane(&SideA); 290 291 SideB.CopyVector(&I->x3); 292 SideB.SubtractVector(&I->x4); 293 HeightB.CopyVector(&intersection); 294 HeightB.SubtractVector(&I->x3); 295 HeightB.ProjectOntoPlane(&SideB); 296 297 retval = HeightA.ScalarProduct(&HeightA) + HeightB.ScalarProduct(&HeightB); 266 intersection[i] = gsl_vector_get(x, i); 267 268 Vector SideA = I->x1 -I->x2 ; 269 Vector HeightA = intersection - I->x1; 270 HeightA.ProjectOntoPlane(SideA); 271 272 Vector SideB = I->x3 - I->x4; 273 Vector HeightB = intersection - I->x3; 274 HeightB.ProjectOntoPlane(SideB); 275 276 retval = HeightA.ScalarProduct(HeightA) + HeightB.ScalarProduct(HeightB); 298 277 //Log() << Verbose(1) << "MinIntersectDistance called, result: " << retval << endl; 299 278 … … 320 299 321 300 struct Intersection par; 322 par.x1 .CopyVector(&point1);323 par.x2 .CopyVector(&point2);324 par.x3 .CopyVector(&point3);325 par.x4 .CopyVector(&point4);301 par.x1 = point1; 302 par.x2 = point2; 303 par.x3 = point3; 304 par.x4 = point4; 326 305 327 306 const gsl_multimin_fminimizer_type *T = gsl_multimin_fminimizer_nmsimplex; … … 336 315 /* Starting point */ 337 316 x = gsl_vector_alloc(NDIM); 338 gsl_vector_set(x, 0, point1 .x[0]);339 gsl_vector_set(x, 1, point1 .x[1]);340 gsl_vector_set(x, 2, point1 .x[2]);317 gsl_vector_set(x, 0, point1[0]); 318 gsl_vector_set(x, 1, point1[1]); 319 gsl_vector_set(x, 2, point1[2]); 341 320 342 321 /* Set initial step sizes to 1 */ … … 369 348 370 349 // check whether intersection is in between or not 371 Vector intersection , SideA, SideB, HeightA, HeightB;350 Vector intersection; 372 351 double t1, t2; 373 352 for (int i = 0; i < NDIM; i++) { 374 intersection.x[i] = gsl_vector_get(s->x, i); 375 } 376 377 SideA.CopyVector(&par.x2); 378 SideA.SubtractVector(&par.x1); 379 HeightA.CopyVector(&intersection); 380 HeightA.SubtractVector(&par.x1); 381 382 t1 = HeightA.ScalarProduct(&SideA)/SideA.ScalarProduct(&SideA); 383 384 SideB.CopyVector(&par.x4); 385 SideB.SubtractVector(&par.x3); 386 HeightB.CopyVector(&intersection); 387 HeightB.SubtractVector(&par.x3); 388 389 t2 = HeightB.ScalarProduct(&SideB)/SideB.ScalarProduct(&SideB); 353 intersection[i] = gsl_vector_get(s->x, i); 354 } 355 356 Vector SideA = par.x2 - par.x1; 357 Vector HeightA = intersection - par.x1; 358 359 t1 = HeightA.ScalarProduct(SideA)/SideA.ScalarProduct(SideA); 360 361 Vector SideB = par.x4 - par.x3; 362 Vector HeightB = intersection - par.x3; 363 364 t2 = HeightB.ScalarProduct(SideB)/SideB.ScalarProduct(SideB); 390 365 391 366 Log() << Verbose(1) << "Intersection " << intersection << " is at " … … 427 402 if (point.IsZero()) 428 403 return M_PI; 429 double phi = point.Angle( &reference);430 if (OrthogonalVector.ScalarProduct( &point) > 0) {404 double phi = point.Angle(reference); 405 if (OrthogonalVector.ScalarProduct(point) > 0) { 431 406 phi = 2.*M_PI - phi; 432 407 } … … 451 426 double volume; 452 427 453 TetraederVector[0] .CopyVector(a);454 TetraederVector[1] .CopyVector(b);455 TetraederVector[2] .CopyVector(c);428 TetraederVector[0] = a; 429 TetraederVector[1] = b; 430 TetraederVector[2] = c; 456 431 for (int j=0;j<3;j++) 457 TetraederVector[j].SubtractVector( &d);458 Point .CopyVector(&TetraederVector[0]);459 Point.VectorProduct( &TetraederVector[1]);460 volume = 1./6. * fabs(Point.ScalarProduct( &TetraederVector[2]));432 TetraederVector[j].SubtractVector(d); 433 Point = TetraederVector[0]; 434 Point.VectorProduct(TetraederVector[1]); 435 volume = 1./6. * fabs(Point.ScalarProduct(TetraederVector[2])); 461 436 return volume; 462 437 }; … … 582 557 if (List != NULL) { 583 558 for (LinkedCell::LinkedNodes::const_iterator Runner = List->begin(); Runner != List->end(); Runner++) { 584 helper.CopyVector(Point); 585 helper.SubtractVector((*Runner)->node); 559 helper = (*Point) - (*(*Runner)->node); 586 560 double currentNorm = helper. Norm(); 587 561 if (currentNorm < distance) { … … 637 611 if (List != NULL) { 638 612 for (LinkedCell::LinkedNodes::const_iterator Runner = List->begin(); Runner != List->end(); Runner++) { 639 helper.CopyVector(Point); 640 helper.SubtractVector((*Runner)->node); 613 helper = (*Point) - (*(*Runner)->node); 641 614 double currentNorm = helper.NormSquared(); 642 615 if (currentNorm < distance) { … … 677 650 Info FunctionInfo(__func__); 678 651 // construct the plane of the two baselines (i.e. take both their directional vectors) 679 Vector Normal; 680 Vector Baseline, OtherBaseline; 681 Baseline.CopyVector(Base->endpoints[1]->node->node); 682 Baseline.SubtractVector(Base->endpoints[0]->node->node); 683 OtherBaseline.CopyVector(OtherBase->endpoints[1]->node->node); 684 OtherBaseline.SubtractVector(OtherBase->endpoints[0]->node->node); 685 Normal.CopyVector(&Baseline); 686 Normal.VectorProduct(&OtherBaseline); 652 Vector Baseline = (*Base->endpoints[1]->node->node) - (*Base->endpoints[0]->node->node); 653 Vector OtherBaseline = (*OtherBase->endpoints[1]->node->node) - (*OtherBase->endpoints[0]->node->node); 654 Vector Normal = Baseline; 655 Normal.VectorProduct(OtherBaseline); 687 656 Normal.Normalize(); 688 657 DoLog(1) && (Log() << Verbose(1) << "First direction is " << Baseline << ", second direction is " << OtherBaseline << ", normal of intersection plane is " << Normal << "." << endl); 689 658 690 659 // project one offset point of OtherBase onto this plane (and add plane offset vector) 691 Vector NewOffset; 692 NewOffset.CopyVector(OtherBase->endpoints[0]->node->node); 693 NewOffset.SubtractVector(Base->endpoints[0]->node->node); 694 NewOffset.ProjectOntoPlane(&Normal); 695 NewOffset.AddVector(Base->endpoints[0]->node->node); 696 Vector NewDirection; 697 NewDirection.CopyVector(&NewOffset); 698 NewDirection.AddVector(&OtherBaseline); 660 Vector NewOffset = (*OtherBase->endpoints[0]->node->node) - (*Base->endpoints[0]->node->node); 661 NewOffset.ProjectOntoPlane(Normal); 662 NewOffset += (*Base->endpoints[0]->node->node); 663 Vector NewDirection = NewOffset + OtherBaseline; 699 664 700 665 // calculate the intersection between this projected baseline and Base 701 666 Vector *Intersection = new Vector; 702 Intersection->GetIntersectionOfTwoLinesOnPlane(Base->endpoints[0]->node->node, Base->endpoints[1]->node->node, &NewOffset, &NewDirection, &Normal); 703 Normal.CopyVector(Intersection); 704 Normal.SubtractVector(Base->endpoints[0]->node->node); 705 DoLog(1) && (Log() << Verbose(1) << "Found closest point on " << *Base << " at " << *Intersection << ", factor in line is " << fabs(Normal.ScalarProduct(&Baseline)/Baseline.NormSquared()) << "." << endl); 667 *Intersection = GetIntersectionOfTwoLinesOnPlane(*(Base->endpoints[0]->node->node), 668 *(Base->endpoints[1]->node->node), 669 NewOffset, NewDirection); 670 Normal = (*Intersection) - (*Base->endpoints[0]->node->node); 671 DoLog(1) && (Log() << Verbose(1) << "Found closest point on " << *Base << " at " << *Intersection << ", factor in line is " << fabs(Normal.ScalarProduct(Baseline)/Baseline.NormSquared()) << "." << endl); 706 672 707 673 return Intersection; … … 721 687 return -1; 722 688 } 723 distance = x->DistanceToPlane( &triangle->NormalVector,triangle->endpoints[0]->node->node);689 distance = x->DistanceToPlane(triangle->NormalVector, *triangle->endpoints[0]->node->node); 724 690 return distance; 725 691 }; … … 747 713 *vrmlfile << "Sphere {" << endl << " "; // 2 is sphere type 748 714 for (i=0;i<NDIM;i++) 749 *vrmlfile << Walker->node-> x[i]-center->x[i]<< " ";715 *vrmlfile << Walker->node->at(i)-center->at(i) << " "; 750 716 *vrmlfile << "\t0.1\t1. 1. 1." << endl; // radius 0.05 and white as colour 751 717 cloud->GoToNext(); … … 757 723 for (i=0;i<3;i++) { // print each node 758 724 for (int j=0;j<NDIM;j++) // and for each node all NDIM coordinates 759 *vrmlfile << TriangleRunner->second->endpoints[i]->node->node-> x[j]-center->x[j]<< " ";725 *vrmlfile << TriangleRunner->second->endpoints[i]->node->node->at(j)-center->at(j) << " "; 760 726 *vrmlfile << "\t"; 761 727 } … … 784 750 Vector *center = cloud->GetCenter(); 785 751 // make the circumsphere's center absolute again 786 helper.CopyVector(Tess->LastTriangle->endpoints[0]->node->node); 787 helper.AddVector(Tess->LastTriangle->endpoints[1]->node->node); 788 helper.AddVector(Tess->LastTriangle->endpoints[2]->node->node); 789 helper.Scale(1./3.); 790 helper.SubtractVector(center); 752 Vector helper = (1./3.) * ((*Tess->LastTriangle->endpoints[0]->node->node) + 753 (*Tess->LastTriangle->endpoints[1]->node->node) + 754 (*Tess->LastTriangle->endpoints[2]->node->node)); 755 helper -= (*center); 791 756 // and add to file plus translucency object 792 757 *rasterfile << "# current virtual sphere\n"; 793 758 *rasterfile << "8\n 25.0 0.6 -1.0 -1.0 -1.0 0.2 0 0 0 0\n"; 794 *rasterfile << "2\n " << helper .x[0] << " " << helper.x[1] << " " << helper.x[2] << "\t" << 5. << "\t1 0 0\n";759 *rasterfile << "2\n " << helper[0] << " " << helper[1] << " " << helper[2] << "\t" << 5. << "\t1 0 0\n"; 795 760 *rasterfile << "9\n terminating special property\n"; 796 761 delete(center); … … 820 785 *rasterfile << "2" << endl << " "; // 2 is sphere type 821 786 for (i=0;i<NDIM;i++) 822 *rasterfile << Walker->node-> x[i]-center->x[i]<< " ";787 *rasterfile << Walker->node->at(i)-center->at(i) << " "; 823 788 *rasterfile << "\t0.1\t1. 1. 1." << endl; // radius 0.05 and white as colour 824 789 cloud->GoToNext(); … … 831 796 for (i=0;i<3;i++) { // print each node 832 797 for (int j=0;j<NDIM;j++) // and for each node all NDIM coordinates 833 *rasterfile << TriangleRunner->second->endpoints[i]->node->node-> x[j]-center->x[j]<< " ";798 *rasterfile << TriangleRunner->second->endpoints[i]->node->node->at(j)-center->at(j) << " "; 834 799 *rasterfile << "\t"; 835 800 } … … 881 846 Walker = target->second->node; 882 847 LookupList[Walker->nr] = Counter++; 883 *tecplot << Walker->node-> x[0] << " " << Walker->node->x[1] << " " << Walker->node->x[2]<< " " << target->second->value << endl;848 *tecplot << Walker->node->at(0) << " " << Walker->node->at(1) << " " << Walker->node->at(2) << " " << target->second->value << endl; 884 849 } 885 850 *tecplot << endl;
Note:
See TracChangeset
for help on using the changeset viewer.