1337 if ( fTessellatedSolid )
1345 G4double rand,area,chose,cf,lambda0,lambda1,alfa,beta,zp;
1348 std::vector<G4ThreeVector> vertices;
1349 for (
G4int i=0; i<4;i++)
1351 vertices.push_back(
G4ThreeVector(fVertices[i].
x(),fVertices[i].y(),-fDz));
1353 for (
G4int i=4; i<8;i++)
1355 vertices.push_back(
G4ThreeVector(fVertices[i].
x(),fVertices[i].y(),fDz));
1360 G4double Surface0=GetFaceSurfaceArea(vertices[0],vertices[1],
1361 vertices[2],vertices[3]);
1362 G4double Surface1=GetFaceSurfaceArea(vertices[0],vertices[1],
1363 vertices[5],vertices[4]);
1364 G4double Surface2=GetFaceSurfaceArea(vertices[3],vertices[0],
1365 vertices[4],vertices[7]);
1366 G4double Surface3=GetFaceSurfaceArea(vertices[2],vertices[3],
1367 vertices[7],vertices[6]);
1368 G4double Surface4=GetFaceSurfaceArea(vertices[2],vertices[1],
1369 vertices[5],vertices[6]);
1370 G4double Surface5=GetFaceSurfaceArea(vertices[4],vertices[5],
1371 vertices[6],vertices[7]);
1373 area = Surface0+Surface1+Surface2+Surface3+Surface4+Surface5;
1376 if ( ( chose < Surface0)
1377 || ( chose > (Surface0+Surface1+Surface2+Surface3+Surface4)) )
1381 if(chose < Surface0)
1384 u = fVertices[ipl]; v = fVertices[j];
1385 w = fVertices[(ipl+3)%4];
1390 u = fVertices[ipl+4]; v = fVertices[j+4];
1391 w = fVertices[(ipl+3)%4+4];
1396 lambda0=alfa-lambda1;
1399 v = u+lambda0*v+lambda1*w;
1403 if (chose < Surface0+Surface1) { ipl=0; }
1404 else if (chose < Surface0+Surface1+Surface2) { ipl=1; }
1405 else if (chose < Surface0+Surface1+Surface2+Surface3) { ipl=2; }
1409 cf = 0.5*(fDz-zp)/fDz;
1410 u = fVertices[ipl+4]+cf*( fVertices[ipl]-fVertices[ipl+4]);
1411 v = fVertices[j+4]+cf*(fVertices[j]-fVertices[j+4]);
CLHEP::Hep3Vector G4ThreeVector
virtual G4ThreeVector GetPointOnSurface() const