52 : aMin(0.), aMax(0.), bMin(0.), bMax(0.),
68 : aMin(0.), aMax(0.), bMin(0.), bMax(0.),
83 for( i=0; i <
n; i++, rOut++, zOut++, rIn--, zIn-- )
107 G4Exception(
"G4ReduciblePolygon::Create()",
"GeomSolids0002",
110 const G4double *anext = a, *bnext = b;
115 newVertex->
a = *anext;
116 newVertex->
b = *bnext;
124 prev->
next = newVertex;
128 }
while( ++anext, ++bnext < b+n );
141 : aMin(0.), aMax(0.), bMin(0.), bMax(0.), numVertices(0), vertexHead(0)
222 *prev = 0, *next = 0;
228 if (std::fabs(curr->
a-next->a) < tolerance &&
229 std::fabs(curr->
b-next->b) < tolerance )
249 if (prev) prev->next = curr;
else vertexHead = curr;
280 G4double tolerance2 = tolerance*tolerance;
292 db = next->b - curr->
b;
308 if (test==curr)
break;
314 dbt = test->
b - curr->
b;
316 if (std::fabs(dat*db-dbt*da)>tolerance2)
break;
340 if ((curr != next) && (next != test))
delete next;
400 if (save == 0)
break;
455 G4double tolerance2 = tolerance*tolerance;
467 db1 = next1->b-curr1->
b;
478 db2 = next2->
b-curr2->
b;
480 b12 = curr2->
b-curr1->
b;
486 if (std::fabs(deter) > tolerance2)
489 s1 = (a12*db2-b12*da2)/deter;
491 if (s1 >= zero && s1 < one)
493 s2 = -(da1*b12-db1*a12)/deter;
494 if (s2 >= zero && s2 < one)
return true;
515 G4int nNeg = 0, nPos = 0;
518 G4double len12 = std::sqrt( a12*a12 + b12*b12 );
519 a12 /= len12; b12 /= len12;
529 if (cross < -tolerance)
531 if (nPos)
return true;
534 else if (cross > tolerance)
536 if (nNeg)
return true;
566 answer += curr->
a*next->b - curr->
b*next->a;
604 else if (curr->
a >
aMax)
609 else if (curr->
b >
bMax)
G4bool CrossesItself(G4double tolerance)
void ScaleB(G4double scale)
void Create(const G4double a[], const G4double b[], G4int n)
virtual ~G4ReduciblePolygon()
G4bool RemoveDuplicateVertices(G4double tolerance)
G4bool RemoveRedundantVertices(G4double tolerance)
void ScaleA(G4double scale)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
void CopyVertices(G4double a[], G4double b[]) const
G4bool BisectedBy(G4double a1, G4double b1, G4double a2, G4double b2, G4double tolerance)
G4ReduciblePolygon(const G4double a[], const G4double b[], G4int n)
G4GLOB_DLL std::ostream G4cerr