在Geant4上旋转后,难以识别固体上的矢量

时间:2019-07-16 02:11:34

标签: rotation geant4

在我的Geant4代码中,我创建了一个盒形芯片3x3x(〜0),它是垂直于z轴并平行于x / y轴创建的。关于芯片的中心,我知道感兴趣的角位于该点(-1.5,-1.5、0)。然后,我通过物理放置旋转芯片。我假设对角矢量进行相同的旋转(即指向角的矢量)将产生一个新的矢量,该矢量在旋转后指向角的新位置。

但是,当我打印新的角矢量并将其绘制在可视化文件中时,它显然与物理角位置不匹配。

下面是代码示例:

在几何构造中

// rotation of chip
G4double theta = M_PI/2. - 0.728;
G4RotationMatrix* rot = new G4RotationMatrix;
rot->rotate(theta*rad, G4ThreeVector(-1,1,0));
rot->rotateZ(M_PI/4.*rad);

// placement of chip
G4VPhysicalVolume *physChip = new G4PVPlacement(rot, G4ThreeVector(10*mm,10*mm,10*mm), logicChip, "Chip", logicWorld, false, 0, true);

在事件操作代码中

// same rotation as object (negative since using opposite conventions)
G4double theta = M_PI/2. - 0.728;
G4RotationMatrix* rot = new G4RotationMatrix;
rot->rotate(-theta*rad, G4ThreeVector(-1,1,0));
rot->rotateZ(-M_PI/4.*rad);

// the vector to the corner before rotation wrt to chip center
G4ThreeVector cornerVec = G4ThreeVector(-1.5, -1.5, 0);

// rotating the corner vector and adding location of chip
G4ThreeVector cornerVecRot = cornerVec.rotate(rot->getDelta(), rot->getAxis()) + G4ThreeVector(10,10,10);
// this should be the new location of the corner after rotation

如果我打印出这个新的cornerVecRot,然后在可视化图中进行绘制,则矢量和新的物理角点将不匹配。

我还尝试使用rotNew->rotate(rot->getDelta(),rot->getAxis());之类的定义旋转,以使代码在旋转应用中看起来几乎完全相同。

有什么想法为什么实体对象的旋转和矢量的旋转不匹配?

0 个答案:

没有答案