public void Load(StatusBar sb) { if (!_loaded) { string txt = sb.Text; sb.Text = "Please wait. Loading functions..."; // setup function code // can be long operation because code will be compiled in memory for (int i = 0; i < _flist.Length; i++) { if (_flist[i] is YFunction) { YFunction yf = (YFunction)_flist[i]; yf.CodeText = _ycodes[i]; } else if (_flist[i] is ParametricFunction) { ParametricFunction pf = (ParametricFunction)_flist[i]; pf.CodeTextX = _xcodes[i]; pf.CodeTextY = _ycodes[i]; } } sb.Text = txt; _loaded = true; } }
private void AnimateStart() { if (listView1.SelectedItems[0].Tag is FunctionBase) { f_anim = (FunctionBase)listView1.SelectedItems[0].Tag; if (f_anim is YFunction) { YFunction yf = (YFunction)f_anim; par_anim_max = yf.MaxX; par_anim_min = yf.MinX; } else if (f_anim is ParametricFunction) { ParametricFunction pf = (ParametricFunction)f_anim; par_anim_max = pf.MaxT; par_anim_min = pf.MinT; } par_anim = par_anim_min; par_anim_step = (par_anim_max - par_anim_min) / 200; timer1.Start(); RedrawChart(); btnAnimate.Text = "Stop animation"; } }
// create node and ParametricFunction group TreeNode AddGroup(TreeNode node, string name, string[] fnames, string[] fcodesx, string[] fcodesy, double tmin, double tmax) { TreeNode gn = new TreeNode(name); FunctionBase[] fs = new FunctionBase[fnames.Length]; //!!VBSubst Dim fs(fnames.Length-1) As FunctionBase for (int i = 0; i < fs.Length; i++) { ParametricFunction f = new ParametricFunction(); f.Label = fnames[i]; f.LineStyle.Color = clrs[i]; f.LineStyle.Thickness = 2; f.MinT = tmin; f.MaxT = tmax; fs[i] = f; } FunctionsGroup fg = new FunctionsGroup(fs, fcodesx, fcodesy); gn.Tag = fg; node.Nodes.Add(gn); return(gn); }
public static bool TryConvertToAutoDiff(ISymbolicExpressionTree tree, bool makeVariableWeightsVariable, bool addLinearScalingTerms, out List <DataForVariable> parameters, out double[] initialConstants, out ParametricFunction func, out ParametricFunctionGradient func_grad) { // use a transformator object which holds the state (variable list, parameter list, ...) for recursive transformation of the tree var transformator = new TreeToAutoDiffTermConverter(makeVariableWeightsVariable, addLinearScalingTerms); AutoDiff.Term term; try { term = transformator.ConvertToAutoDiff(tree.Root.GetSubtree(0)); var parameterEntries = transformator.parameters.ToArray(); // guarantee same order for keys and values var compiledTerm = term.Compile(transformator.variables.ToArray(), parameterEntries.Select(kvp => kvp.Value).ToArray()); parameters = new List <DataForVariable>(parameterEntries.Select(kvp => kvp.Key)); initialConstants = transformator.initialConstants.ToArray(); func = (vars, @params) => compiledTerm.Evaluate(vars, @params); func_grad = (vars, @params) => compiledTerm.Differentiate(vars, @params); return(true); } catch (ConversionException) { func = null; func_grad = null; parameters = null; initialConstants = null; } return(false); }
private void timer1_Tick(object sender, System.EventArgs e) { par_anim += par_anim_step; if (par_anim > par_anim_max) { par_anim = par_anim_max; par_anim_step = -par_anim_step; } else if (par_anim < par_anim_min) { par_anim = par_anim_min; par_anim_step = -par_anim_step; } if (f_anim != null) { double xd = 0, yd = 0; int x = 0, y = 0; if (f_anim is YFunction) { YFunction yf = (YFunction)f_anim; xd = par_anim; yd = yf.GetY(xd); statusBar1.Text = string.Format(" x={0:g4}", xd); } else if (f_anim is ParametricFunction) { ParametricFunction pf = (ParametricFunction)f_anim; xd = pf.GetX(par_anim); yd = pf.GetY(par_anim); statusBar1.Text = string.Format(" t={0:g4}", par_anim); } Axis xa = c1Chart1.ChartArea.AxisX; Axis ya = c1Chart1.ChartArea.AxisY; if (xd >= xa.Min && xd <= xa.Max && yd >= ya.Min && yd <= ya.Max && c1Chart1.ChartGroups[0].DataCoordToCoord(xd, yd, ref x, ref y)) { RedrawChart(); curPosition.X = x; curPosition.Y = y; RedrawChart(); } else { RedrawChart(); curPosition = Point.Empty; } } }
public static Mesh Generate(int xSize, int ySize, ParametricFunction Func) { Mesh mesh = new Mesh(); mesh.name = "Procedural Grid"; Vector3[] vertices = new Vector3[(xSize + 1) * (ySize + 1)]; Vector2[] uv = new Vector2[vertices.Length]; Vector4[] tangents = new Vector4[vertices.Length]; Vector4 tangent = new Vector4(1f, 0f, 0f, -1f); for (int i = 0, y = 0; y <= ySize; y++) { for (int x = 0; x <= xSize; x++, i++) { vertices[i] = Func((float)x / (float)xSize, (float)y / (float)ySize); uv[i] = new Vector2((float)x / xSize, (float)y / ySize); tangents[i] = tangent; } } mesh.vertices = vertices; mesh.uv = uv; mesh.tangents = tangents; int[] triangles = new int[xSize * ySize * 6]; for (int ti = 0, vi = 0, y = 0; y < ySize; y++, vi++) { for (int x = 0; x < xSize; x++, ti += 6, vi++) { triangles[ti] = vi; triangles[ti + 3] = triangles[ti + 2] = vi + 1; triangles[ti + 4] = triangles[ti + 1] = vi + xSize + 1; triangles[ti + 5] = vi + xSize + 2; } } mesh.triangles = triangles; mesh.RecalculateNormals(); return(mesh); }
public VelocityChangerParametric(ParametricFunction xFunction, ParametricFunction yFunction) { _ParametricX = xFunction; _ParametricY = yFunction; }