Exemplo n.º 1
0
        public Fix64Vec3 EulerAngles()
        {
            Fix64 xDegree = Fix64.RadToDeg(GetXAngle());
            Fix64 yDegree = Fix64.RadToDeg(GetYAngle());
            Fix64 zDegree = Fix64.RadToDeg(GetZAngle());

            return(new Fix64Vec3(xDegree, yDegree, zDegree));
        }
Exemplo n.º 2
0
        //https://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/
        public Fix64Vec3 EulerAngles1()
        {
            Fix64 sqw  = w * w;
            Fix64 sqx  = x * x;
            Fix64 sqy  = y * y;
            Fix64 sqz  = z * z;
            Fix64 unit = sqx + sqy + sqz + sqw; // if normalised is one, otherwise is correction factor
            Fix64 test = x * y + z * w;

            Fix64 _x = Fix64.zero;
            Fix64 _y = Fix64.zero;
            Fix64 _z = Fix64.zero;

            Fix64 cutoff = Fix64.FromDivision(499, 1000) * unit;

            _z = Fix64.Atan2((Fix64)2 * y * w - (Fix64)2 * x * z, sqx - sqy - sqz + sqw);
            _y = Fix64.Asin((Fix64)2 * test / unit);
            _x = Fix64.Atan2((Fix64)2 * x * w - (Fix64)2 * y * z, -sqx + sqy - sqz + sqw);

            //if (test >= cutoff)
            //{ // singularity at north pole
            //    _z = (Fix64)2 * Fix64.Atan2(x, w);
            //    _y = Fix64.halfPi;
            //    _x = Fix64.zero;
            //}
            //else if (test < -cutoff)
            //{ // singularity at south pole
            //    _z = -(Fix64)2 * Fix64.Atan2(x, w);
            //    _y = -Fix64.halfPi;
            //    _x = Fix64.zero;
            //}
            //else
            //{
            //    _z = Fix64.Atan2((Fix64)2 * y * w - (Fix64)2 * x * z, sqx - sqy - sqz + sqw);
            //    _y = Fix64.Asin((Fix64)2 * test / unit);
            //    _x = Fix64.Atan2((Fix64)2 * x * w - (Fix64)2 * y * z, -sqx + sqy - sqz + sqw);
            //}
            Fix64 xDegree = Fix64.RadToDeg(_x);
            Fix64 yDegree = Fix64.RadToDeg(_y);
            Fix64 zDegree = Fix64.RadToDeg(_z);

            return(new Fix64Vec3(xDegree, zDegree, yDegree));
        }
Exemplo n.º 3
0
        public bool Load(uint step)
        {
            bool result = _body2D.LoadSavedExport(step);

            pTransform._internal_WriteTranform((Fix64Vec3)_body2D.position, new Fix64Vec3(Fix64.zero, Fix64.zero, Fix64.RadToDeg(_body2D.angle)));

            return(result);
        }
Exemplo n.º 4
0
 public void OnTransformUpdated()
 {
     pTransform._internal_WriteTranform((Fix64Vec3)_body2D.position, new Fix64Vec3(Fix64.zero, Fix64.zero, Fix64.RadToDeg(_body2D.angle)));
 }