yus
May 2, 2019, 10:43am
1
Hi,
suppose I have two 3D points:
TGLVertex3 A(1, 1, 0.5);
TGLVertex3 B(1, 1, 0.2);
, which form a line:
TGLLine3 lineBeforeRotation(A, B);
Now, at point B I want to rotate the line, basically calculating a new point C, knowing both angles theta1
(in the XZ plane) with respect to the old theta0
of the lineBeforeRotation
and phi1
(in the XY plane) with respect to the old phi0
of the lineBeforeRotation
. I also know the distance between B and C, rho
.
What is the simplest way of calculating the cartesian coordinates of the C point?
ROOT Version: 6.14.04
Platform: x86_64-slc6
Compiler: gcc62
yus
May 3, 2019, 1:36pm
2
I seem to have it figured out by myself:
TGLVertex3 A(1, 1, 0.5);
TGLVertex3 B(1, 1, 0.2);
TGLLine3 lineBeforeRotation(A, B);
TVector3 vectorBeforeRotation(lineBeforeRotation.Vector().X(), lineBeforeRotation.Vector().Y(), lineBeforeRotation.Vector().Z());
float theta1 = 45*TMath::DegToRad(); // rotate by this angle wrt old theta
float phi1 = 45*TMath::DegToRad(); // rotate by this angle wrt old phi
float rho = 20.;
TVector3 vectorAfterRotation(vectorBeforeRotation);
vectorAfterRotation.SetTheta(vectorBeforeRotation.Theta()+theta1);
vectorAfterRotation.SetPhi(vectorBeforeRotation.Phi()+phi1);
vectorAfterRotation.SetMag(rho);
TGLLine3 trackAfterRotation(B, TGLVector3(vectorAfterRotation.X(), vectorAfterRotation.Y(), vectorAfterRotation.Z()));
printf("C-point coordinates: (%+.2f, %+.2f, %+.2f)\n", trackAfterRotation.End().X(), trackAfterRotation.End().Y(), trackAfterRotation.End().Z());
system
Closed
May 17, 2019, 1:36pm
3
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.