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