72REveTrans::REveTrans() :
74 fA1(0), fA2(0), fA3(0), fAsOK(
kFALSE),
88 fA1(t.fA1), fA2(t.fA2), fA3(t.fA3), fAsOK(t.fAsOK),
89 fUseTrans (t.fUseTrans),
90 fEditTrans(t.fEditTrans),
102 fA1(0), fA2(0), fA3(0), fAsOK(
kFALSE),
105 fEditRotation(
kTRUE),
116 fA1(0), fA2(0), fA3(0), fAsOK(
kFALSE),
119 fEditRotation(
kTRUE),
203 t(i,
j) = -s; t(
j,i) = s;
225 f = (
e < 0.0f) ? -
e :
e;
233 x.fX = (from.
fX > 0.0f) ? from.
fX : -from.
fX;
234 x.fY = (from.
fY > 0.0f) ? from.
fY : -from.
fY;
235 x.fZ = (from.
fZ > 0.0f) ? from.
fZ : -from.
fZ;
240 x.fX = 1.0f;
x.fY =
x.fZ = 0.0f;
242 x.fZ = 1.0f;
x.fX =
x.fY = 0.0f;
248 x.fY = 1.0f;
x.fX =
x.fZ = 0.0f;
250 x.fZ = 1.0f;
x.fX =
x.fY = 0.0f;
257 c1 = 2.0f /
u.Mag2();
258 c2 = 2.0f /
v.Mag2();
261 for (
int i = 0; i < 3; i++) {
262 for (
int j = 0;
j < 3;
j++) {
287 CM(1, 1) =
e +
h *
v.fY *
v.fY;
303 for(
int c=0;
c<4; ++
c, col+=4) {
305 for(
int r=0;
r<4; ++
r, ++row)
306 buf[
r] = row[0]*col[0] + row[4]*col[1] + row[8]*col[2] + row[12]*col[3];
307 col[0] = buf[0]; col[1] = buf[1]; col[2] = buf[2]; col[3] = buf[3];
319 for(
int r=0;
r<4; ++
r, ++row) {
321 for(
int c=0;
c<4; ++
c, col+=4)
322 buf[
c] = row[0]*col[0] + row[4]*col[1] + row[8]*col[2] + row[12]*col[3];
323 row[0] = buf[0]; row[4] = buf[1]; row[8] = buf[2]; row[12] = buf[3];
381 --
i1 <<= 2; --
i2 <<= 2;
382 for (
int r=0;
r<4; ++
r, ++row) {
383 b1 = cos*row[
i1] + sin*row[
i2];
384 b2 = cos*row[
i2] - sin*row[
i1];
385 row[
i1] = b1; row[
i2] = b2;
421 for(
int c=0;
c<4; ++
c, col+=4) {
422 b1 = cos*col[
i1] - sin*col[
i2];
423 b2 = cos*col[
i2] + sin*col[
i1];
424 col[
i1] = b1; col[
i2] = b2;
472 col[0] =
x; col[1] =
y; col[2] = z;
499 v.SetXYZ(col[0], col[1], col[2]);
607 for(
int i=0; i<
n; i++) {
610 case 'x':
case 'X':
RotateLF(2, 3,
a[i]);
break;
611 case 'y':
case 'Y':
RotateLF(3, 1,
a[i]);
break;
612 case 'z':
case 'Z':
RotateLF(1, 2,
a[i]);
break;
627 if(
d>1)
d=1;
else if(
d<-1)
d=-1;
827 c[0] /=
l;
c[1] /=
l;
c[2] /=
l;
908 throw(
eh +
"matrix is singular.");
943 if (
R__b.IsReading()) {
957 for(
Int_t i=0; i<4; ++i, ++row)
958 printf(
"%8.3f %8.3f %8.3f | %8.3f\n", row[0], row[4], row[8], row[12]);
968 s.setf(std::ios::fixed, std::ios::floatfield);
970 for(
Int_t i=1; i<=4; i++)
972 s << t(i,
j) << ((
j==4) ?
"\n" :
"\t");
1000 m[0] =
r[0]*s[0];
m[1] =
r[3]*s[0];
m[2] =
r[6]*s[0];
m[3] = 0;
1001 m[4] =
r[1]*s[1];
m[5] =
r[4]*s[1];
m[6] =
r[7]*s[1];
m[7] = 0;
1002 m[8] =
r[2]*s[2];
m[9] =
r[5]*s[2];
m[10] =
r[8]*s[2];
m[11] = 0;
1003 m[12] = t[0];
m[13] = t[1];
m[14] = t[2];
m[15] = 1;
1007 m[0] =
r[0];
m[1] =
r[3];
m[2] =
r[6];
m[3] = 0;
1008 m[4] =
r[1];
m[5] =
r[4];
m[6] =
r[7];
m[7] = 0;
1009 m[8] =
r[2];
m[9] =
r[5];
m[10] =
r[8];
m[11] = 0;
1010 m[12] = t[0];
m[13] = t[1];
m[14] = t[2];
m[15] = 1;
1028 r[0] =
m[0]/s[0];
r[3] =
m[1]/s[0];
r[6] =
m[2]/s[0];
m += 4;
1029 r[1] =
m[0]/s[1];
r[4] =
m[1]/s[1];
r[7] =
m[2]/s[1];
m += 4;
1030 r[2] =
m[0]/s[2];
r[5] =
m[1]/s[2];
r[8] =
m[2]/s[2];
m += 4;
1031 t[0] =
m[0]; t[1] =
m[1]; t[2] =
m[2];
1036 r[0] = 1;
r[3] = 0;
r[6] = 0;
1037 r[1] = 0;
r[4] = 1;
r[7] = 0;
1038 r[2] = 0;
r[5] = 0;
r[8] = 1;
1039 s[0] = s[1] = s[2] = 1;
1040 t[0] = t[1] = t[2] = 0;
1055 m[0] =
fM[0];
m[1] =
fM[4];
m[2] =
fM[8];
m[3] =
fM[3];
1056 m[4] =
fM[1];
m[5] =
fM[5];
m[6] =
fM[9];
m[7] =
fM[7];
1057 m[8] =
fM[2];
m[9] =
fM[6];
m[10] =
fM[10];
m[11] =
fM[11];
1058 m[12] =
fM[12];
m[13] =
fM[13];
m[14] =
fM[14];
m[15] =
fM[15];
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
REveException Exception-type thrown by Eve classes.
REveTrans operator*(const REveTrans &t)
Copy, multiply from right and return product.
void UnitRot()
Reset rotation part of the matrix to unity.
void SetBuffer3D(TBuffer3D &buff)
Fill transformation part TBuffer3D core section.
void SetupRotation(Int_t i, Int_t j, Double_t f)
Setup the matrix as an elementary rotation.
Double_t Norm3Column(Int_t col)
Norm 3-vector in column col.
void SetScaleY(Double_t sy)
Change y scaling.
void RotatePF(Int_t i1, Int_t i2, Double_t amount)
Rotate in parent frame. Does optimised version of MultLeft.
Double_t Invert()
Invert matrix.
void MultiplyIP(TVector3 &v, Double_t w=1) const
Multiply vector in-place.
void RotateLF(Int_t i1, Int_t i2, Double_t amount)
Rotate in local frame. Does optimised version of MultRight.
void GetScale(Double_t &sx, Double_t &sy, Double_t &sz) const
Deduce scales from sizes of base vectors.
REveTrans()
Default constructor.
void TransposeRotationPart()
Transpose 3x3 rotation sub-matrix.
void ZeroTrans(Double_t w=1.0)
Reset matrix to zero, only the perspective scaling is set to w (1 by default).
void Move3PF(Double_t x, Double_t y, Double_t z)
General move in parent-frame.
void SetTrans(const REveTrans &t, Bool_t copyAngles=kTRUE)
Set matrix from another,.
void SetFromArray(const Double_t arr[16])
Set matrix from Double_t array.
void MovePF(Int_t ai, Double_t amount)
Move in parent-frame along axis index ai.
void SetBaseVec(Int_t b, Double_t x, Double_t y, Double_t z)
Set base-vector with index b.
void SetScaleX(Double_t sx)
Change x scaling.
void MoveLF(Int_t ai, Double_t amount)
Move in local-frame along axis with index ai.
Double_t Orto3Column(Int_t col, Int_t ref)
Orto-norm 3-vector in column col with respect to column ref.
void SetGeoHMatrix(TGeoHMatrix &mat)
Set TGeoHMatrix mat.
void SetScale(Double_t sx, Double_t sy, Double_t sz)
Set scaling.
void OrtoNorm3()
Orto-norm columns 1 to 3.
void Move(const REveTrans &a, Int_t ai, Double_t amount)
Move in a's coord-system along axis-index ai.
void SetFrom(Double_t *carr)
void Move3LF(Double_t x, Double_t y, Double_t z)
General move in local-frame.
void GetRotAngles(Float_t *x) const
Get Cardan rotation angles (pattern xYz above).
void SetupFromToVec(const REveVector &from, const REveVector &to)
A function for creating a rotation matrix that rotates a vector called "from" into another vector cal...
Double_t CM(Int_t i, Int_t j) const
void Print(Option_t *option="") const override
Print in reasonable format.
TVector3 Multiply(const TVector3 &v, Double_t w=1) const
Multiply vector and return it.
void SetPos(Double_t x, Double_t y, Double_t z)
Set position (base-vec 4).
void Scale(Double_t sx, Double_t sy, Double_t sz)
Scale matrix. Translation part untouched.
void UnitTrans()
Reset matrix to unity.
Bool_t IsScale(Double_t low=0.9, Double_t high=1.1) const
Test if the transformation is a scale.
void Move3(const REveTrans &a, Double_t x, Double_t y, Double_t z)
General move in a's coord-system.
void RotateIP(TVector3 &v) const
Rotate vector in-place. Translation is NOT applied.
void MultRight(const REveTrans &t)
Multiply from right: this = this * t.
Double_t Unscale()
Remove scaling, make all base vectors of unit length.
void SetScaleZ(Double_t sz)
Change z scaling.
void SetRotByAnyAngles(Float_t a1, Float_t a2, Float_t a3, const char *pat)
Sets Rotation part as given by angles a1, a1, a3 and pattern pat.
void SetRotByAngles(Float_t a1, Float_t a2, Float_t a3)
void MultLeft(const REveTrans &t)
Multiply from left: this = t * this.
TVector3 GetBaseVec(Int_t b) const
Get base-vector with index b.
void Rotate(const REveTrans &a, Int_t i1, Int_t i2, Double_t amount)
Rotate in a's coord-system, rotating base vector with index i1 into i2.
REveVectorT Cross(const REveVectorT &a) const
TT Dot(const REveVectorT &a) const
Generic 3D primitive description class.
Buffer base class used for serializing objects.
Matrix class used for computing global transformations Should NOT be used for node definition.
Geometrical transformation package.
Mother of all ROOT objects.
virtual void Streamer(TBuffer &)
Stream an object of class TObject.
void SetXYZ(Double_t x, Double_t y, Double_t z)
std::ostream & operator<<(std::ostream &os, const RConcurrentHashColl::HashValue &h)
Double_t ASin(Double_t)
Returns the principal value of the arc sine of x, expressed in radians.
Double_t ATan2(Double_t y, Double_t x)
Returns the principal value of the arc tangent of y/x, expressed in radians.
Double_t Sqrt(Double_t x)
Returns the square root of x.
Double_t Cos(Double_t)
Returns the cosine of an angle of x radians.
Double_t Sin(Double_t)
Returns the sine of an angle of x radians.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.
constexpr Double_t TwoPi()