MTExample5_5.Matrix3.Axonometric C# (CSharp) Method

Axonometric() public static method

public static Axonometric ( float alpha, float beta ) : Matrix3
alpha float
beta float
return Matrix3
        public static Matrix3 Axonometric(float alpha, float beta)
        {
            var result = new Matrix3 ();
            var sna = (float)Math.Sin(alpha * Math.PI / 180);
            var cna = (float)Math.Cos(alpha * Math.PI / 180);
            var snb = (float)Math.Sin(beta * Math.PI / 180);
            var cnb = (float)Math.Cos(beta * Math.PI / 180);
            result.M[0, 0] = cnb;
            result.M[0, 2] = snb;
            result.M[1, 0] = sna * snb;
            result.M[1, 1] = cna;
            result.M[1, 2] = -sna * cnb;
            result.M[2, 2] = 0;
            return result;
        }

Usage Example

Example #1
0
        public void DrawIsometricView(Graphics g)
        {
            Point3[] ptsBottom = CircleCoordinates(-h / 2);
            PointF[] ptaBottom = new PointF[ptsBottom.Length];
            Point3[] ptsTop    = CircleCoordinates(h / 2);
            PointF[] ptaTop    = new PointF[ptsTop.Length];
            Matrix3  m         = Matrix3.Axonometric(35.26f, -45);

            for (int i = 0; i < ptsBottom.Length; i++)
            {
                ptsBottom [i].Transform(m);
                ptaBottom [i] = Point2D(new PointF(ptsBottom [i].X, ptsBottom [i].Y));
                ptsTop [i].Transform(m);
                ptaTop [i] = Point2D(new PointF(ptsTop [i].X, ptsTop [i].Y));
            }

            PointF[] ptf = new PointF[4];
            for (int i = 1; i < ptsTop.Length; i++)
            {
                ptf [0] = ptaBottom [i - 1];
                ptf [1] = ptaTop [i - 1];
                ptf [2] = ptaTop [i];
                ptf [3] = ptaBottom [i];
                if (i < 5 || i > ptsTop.Length - 12)
                {
                    g.FillPolygon(Brushes.White, ptf);
                    g.DrawPolygon(Pens.Black, ptf);
                }
            }

            g.FillPolygon(Brushes.White, ptaTop);
            g.DrawPolygon(Pens.Black, ptaTop);
        }