/// <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); }
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"); }