Example #1
0
        public override void Recalculate()
        {
            //Recalculate the vector values
            rot.Recalculate();
            trans.Recalculate();
            origin.Recalculate();
            color.Recalculate();

            //Transform geometry matrix
            vertecies.SetFromMatrix(originalGeo);
            vertecies.Translate(origin.values);
            vertecies.Scale(scale.Evaluate());
            vertecies.Rotate(rot.values);
            vertecies.Translate(position[0], position[1], position[2]);
            vertecies.Translate(trans.values);

            //vertecies = new _geo.ToColumnWiseArray();

            //Transform color matrix
            //MatrixD _col;
            //_col = MatrixD.TranslateMatrix(color.values, col);

            //Set values
            //vertexColor = _col.ToColumnWiseArray();
        }
        /// <summary>
        /// Returns an array of points representing a graph in polar coordinates
        /// </summary>
        /// <param name="expression">What to graph</param>
        /// <param name="start">Theta value to begin at</param>
        /// <param name="stop">Theta value to end at</param>
        /// <param name="step">Theta resolution</param>
        /// <returns></returns>
        public static double[,] GraphPolar(ExpressionD expression, double start, double stop, double step)
        {
            if (start >= stop || step <= 0)
            {
                throw new Exception("Cannot graph polar, invalid arguments");
            }

            double[,] result;
            ArrayList points = new ArrayList();

            //Perform calculations
            ExpressionD.AddSymbol("i", 0);
            int    index = 0;
            double theta;

            for (double i = start; i < stop; i += step)
            {
                ExpressionD.SetSymbolValue("i", i * Math.PI / 180.0);
                theta = i * Math.PI / 180.0;

                points.Add(new Point3(
                               expression.Evaluate() * Math.Sin(theta),
                               expression.Evaluate() * Math.Cos(theta),
                               0
                               ));

                index++;
            }
            ExpressionD.RemoveSymbol("i");

            //Convert
            result = new double[3, points.Count];
            int count = 0;

            foreach (Point3 p in points)
            {
                result[0, count] = p.x;
                result[1, count] = p.y;
                result[2, count] = p.z;
                count++;
            }

            return(result);
        }