コード例 #1
0
        /// <summary>
        /// Calculates composition of two transformations, i.e. new transformation C(x) = A(B(x))
        /// </summary>
        /// <param name="trA"></param>
        /// <param name="trB"></param>
        /// <returns></returns>
        public static IsometricTransform Compose(IsometricTransform trA, IsometricTransform trB)
        {
            var newAngle     = Angles.NormalizeRad(trA.AngleRadians + trB.AngleRadians);
            var newPreShift  = new Point(trB.preShiftX, trB.preShiftY);
            var newPostShift = trA.Transform(new Point(trB.postShiftX, trB.postShiftY));

            return(new IsometricTransform(newAngle, newPostShift, newPreShift));
        }
コード例 #2
0
        public static IsometricTransform DetectTransform(Func <Point, Point> transform)
        {
            var pntZeroImage = transform(new Point(0, 0));
            var pntTestImage = transform(new Point(1000, 1000));
            var cosPlusSin   = (pntTestImage.x - pntZeroImage.x) / 1000;
            var cosMinusSin  = (pntTestImage.y - pntZeroImage.y) / 1000;

            var cosAngle = (cosPlusSin + cosMinusSin) / 2;
            var sinAngle = (cosPlusSin - cosMinusSin) / 2;
            var angle    = Angles.DecodeAngle(cosAngle, sinAngle);

            return(new IsometricTransform(angle, pntZeroImage));
        }
コード例 #3
0
 public override string ToString()
 {
     return(string.Format("Pre: ({0:N2}, {1:N2}), Angle: {2:N2}, Post: ({3:N2}, {4:N2})", preShiftX, preShiftY, Angles.RadToDeg(angleRadians), postShiftX, postShiftY));
 }