Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        public override void Recalculate()
        {
            //base.Recalculate();

            //Setup expression values
            ExpressionD.AddSymbol("dist", 0);
            ExpressionD.AddSymbol("length", length);
            ExpressionD.AddSymbol("xslope", 0);
            ExpressionD.AddSymbol("yslope", 0);
            ExpressionD.AddSymbol("zslope", 0);

            //Set the properties of the child objects
            foreach (PenVertex penVert in vertecies)
            {
                //Set variables
                ExpressionD.SetSymbolValue("dist", penVert.distance);
                ExpressionD.SetSymbolValue("xslope", penVert.slope[0]);
                ExpressionD.SetSymbolValue("yslope", penVert.slope[1]);
                ExpressionD.SetSymbolValue("zslope", penVert.slope[2]);

                //Calculate
                color.Recalculate();

                //Set
                ((SimpleObject3)penVert.obj).Recalculate();
                ((SimpleObject3)penVert.obj).SetColor(color.Values());
                ((SimpleObject3)penVert.obj).ScaleGeo(scale.Evaluate());
                ((SimpleObject3)penVert.obj).TranslateGeo(penVert.x, penVert.y, penVert.z);
            }

            //Remove them as the program leaves scope
            ExpressionD.RemoveSymbol("dist");
            ExpressionD.RemoveSymbol("length");
            ExpressionD.RemoveSymbol("xslope");
            ExpressionD.RemoveSymbol("yslope");
            ExpressionD.RemoveSymbol("zslope");
        }