Version 1.3 is ready. #41
@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
namespace Graphing.Abstract;
|
namespace Graphing.Abstract;
|
||||||
|
|
||||||
public interface IEquationConvertible
|
public interface IConvertEquation
|
||||||
{
|
{
|
||||||
|
public bool UngraphWhenConvertedToEquation { get; }
|
||||||
|
|
||||||
public Equation ToEquation();
|
public Equation ToEquation();
|
||||||
}
|
}
|
||||||
10
Base/Abstract/IConvertSlopeField.cs
Normal file
10
Base/Abstract/IConvertSlopeField.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
using Graphing.Graphables;
|
||||||
|
|
||||||
|
namespace Graphing.Abstract;
|
||||||
|
|
||||||
|
public interface IConvertSlopeField
|
||||||
|
{
|
||||||
|
public bool UngraphWhenConvertedToSlopeField { get; }
|
||||||
|
|
||||||
|
public SlopeField ToSlopeField(int detail);
|
||||||
|
}
|
||||||
26
Base/Forms/GraphForm.Designer.cs
generated
26
Base/Forms/GraphForm.Designer.cs
generated
@ -44,12 +44,13 @@ namespace Graphing.Forms
|
|||||||
MenuOperations = new ToolStripMenuItem();
|
MenuOperations = new ToolStripMenuItem();
|
||||||
MenuOperationsDerivative = new ToolStripMenuItem();
|
MenuOperationsDerivative = new ToolStripMenuItem();
|
||||||
MenuOperationsIntegral = new ToolStripMenuItem();
|
MenuOperationsIntegral = new ToolStripMenuItem();
|
||||||
|
MenuOperationsTranslate = new ToolStripMenuItem();
|
||||||
MenuConvert = new ToolStripMenuItem();
|
MenuConvert = new ToolStripMenuItem();
|
||||||
MenuConvertEquation = new ToolStripMenuItem();
|
MenuConvertEquation = new ToolStripMenuItem();
|
||||||
MenuMisc = new ToolStripMenuItem();
|
MenuMisc = new ToolStripMenuItem();
|
||||||
MenuMiscCaches = new ToolStripMenuItem();
|
MenuMiscCaches = new ToolStripMenuItem();
|
||||||
MiscMenuPreload = new ToolStripMenuItem();
|
MiscMenuPreload = new ToolStripMenuItem();
|
||||||
MenuOperationsTranslate = new ToolStripMenuItem();
|
MenuConvertSlopeField = new ToolStripMenuItem();
|
||||||
GraphMenu.SuspendLayout();
|
GraphMenu.SuspendLayout();
|
||||||
SuspendLayout();
|
SuspendLayout();
|
||||||
//
|
//
|
||||||
@ -121,13 +122,13 @@ namespace Graphing.Forms
|
|||||||
// MenuElementsColors
|
// MenuElementsColors
|
||||||
//
|
//
|
||||||
MenuElementsColors.Name = "MenuElementsColors";
|
MenuElementsColors.Name = "MenuElementsColors";
|
||||||
MenuElementsColors.Size = new Size(359, 44);
|
MenuElementsColors.Size = new Size(233, 44);
|
||||||
MenuElementsColors.Text = "Colors";
|
MenuElementsColors.Text = "Colors";
|
||||||
//
|
//
|
||||||
// MenuElementsRemove
|
// MenuElementsRemove
|
||||||
//
|
//
|
||||||
MenuElementsRemove.Name = "MenuElementsRemove";
|
MenuElementsRemove.Name = "MenuElementsRemove";
|
||||||
MenuElementsRemove.Size = new Size(359, 44);
|
MenuElementsRemove.Size = new Size(233, 44);
|
||||||
MenuElementsRemove.Text = "Remove";
|
MenuElementsRemove.Text = "Remove";
|
||||||
//
|
//
|
||||||
// MenuOperations
|
// MenuOperations
|
||||||
@ -149,9 +150,15 @@ namespace Graphing.Forms
|
|||||||
MenuOperationsIntegral.Size = new Size(360, 44);
|
MenuOperationsIntegral.Size = new Size(360, 44);
|
||||||
MenuOperationsIntegral.Text = "Compute Integral";
|
MenuOperationsIntegral.Text = "Compute Integral";
|
||||||
//
|
//
|
||||||
|
// MenuOperationsTranslate
|
||||||
|
//
|
||||||
|
MenuOperationsTranslate.Name = "MenuOperationsTranslate";
|
||||||
|
MenuOperationsTranslate.Size = new Size(360, 44);
|
||||||
|
MenuOperationsTranslate.Text = "Translate";
|
||||||
|
//
|
||||||
// MenuConvert
|
// MenuConvert
|
||||||
//
|
//
|
||||||
MenuConvert.DropDownItems.AddRange(new ToolStripItem[] { MenuConvertEquation });
|
MenuConvert.DropDownItems.AddRange(new ToolStripItem[] { MenuConvertEquation, MenuConvertSlopeField });
|
||||||
MenuConvert.Name = "MenuConvert";
|
MenuConvert.Name = "MenuConvert";
|
||||||
MenuConvert.Size = new Size(118, 38);
|
MenuConvert.Size = new Size(118, 38);
|
||||||
MenuConvert.Text = "Convert";
|
MenuConvert.Text = "Convert";
|
||||||
@ -159,7 +166,7 @@ namespace Graphing.Forms
|
|||||||
// MenuConvertEquation
|
// MenuConvertEquation
|
||||||
//
|
//
|
||||||
MenuConvertEquation.Name = "MenuConvertEquation";
|
MenuConvertEquation.Name = "MenuConvertEquation";
|
||||||
MenuConvertEquation.Size = new Size(273, 44);
|
MenuConvertEquation.Size = new Size(359, 44);
|
||||||
MenuConvertEquation.Text = "To Equation";
|
MenuConvertEquation.Text = "To Equation";
|
||||||
//
|
//
|
||||||
// MenuMisc
|
// MenuMisc
|
||||||
@ -183,11 +190,11 @@ namespace Graphing.Forms
|
|||||||
MiscMenuPreload.Text = "Preload Cache";
|
MiscMenuPreload.Text = "Preload Cache";
|
||||||
MiscMenuPreload.Click += MiscMenuPreload_Click;
|
MiscMenuPreload.Click += MiscMenuPreload_Click;
|
||||||
//
|
//
|
||||||
// MenuOperationsTranslate
|
// MenuConvertSlopeField
|
||||||
//
|
//
|
||||||
MenuOperationsTranslate.Name = "MenuOperationsTranslate";
|
MenuConvertSlopeField.Name = "MenuConvertSlopeField";
|
||||||
MenuOperationsTranslate.Size = new Size(360, 44);
|
MenuConvertSlopeField.Size = new Size(359, 44);
|
||||||
MenuOperationsTranslate.Text = "Translate";
|
MenuConvertSlopeField.Text = "To Slope Field";
|
||||||
//
|
//
|
||||||
// GraphForm
|
// GraphForm
|
||||||
//
|
//
|
||||||
@ -226,5 +233,6 @@ namespace Graphing.Forms
|
|||||||
private ToolStripMenuItem MenuElementsColors;
|
private ToolStripMenuItem MenuElementsColors;
|
||||||
private ToolStripMenuItem MenuElementsRemove;
|
private ToolStripMenuItem MenuElementsRemove;
|
||||||
private ToolStripMenuItem MenuOperationsTranslate;
|
private ToolStripMenuItem MenuOperationsTranslate;
|
||||||
|
private ToolStripMenuItem MenuConvertSlopeField;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -369,6 +369,7 @@ public partial class GraphForm : Form
|
|||||||
MenuOperationsDerivative.DropDownItems.Clear();
|
MenuOperationsDerivative.DropDownItems.Clear();
|
||||||
MenuOperationsIntegral.DropDownItems.Clear();
|
MenuOperationsIntegral.DropDownItems.Clear();
|
||||||
MenuConvertEquation.DropDownItems.Clear();
|
MenuConvertEquation.DropDownItems.Clear();
|
||||||
|
MenuConvertSlopeField.DropDownItems.Clear();
|
||||||
MenuOperationsTranslate.DropDownItems.Clear();
|
MenuOperationsTranslate.DropDownItems.Clear();
|
||||||
|
|
||||||
foreach (Graphable able in ables)
|
foreach (Graphable able in ables)
|
||||||
@ -409,7 +410,7 @@ public partial class GraphForm : Form
|
|||||||
integralItem.Click += (o, e) => Graph(integrable.Integrate());
|
integralItem.Click += (o, e) => Graph(integrable.Integrate());
|
||||||
MenuOperationsIntegral.DropDownItems.Add(integralItem);
|
MenuOperationsIntegral.DropDownItems.Add(integralItem);
|
||||||
}
|
}
|
||||||
if (able is IEquationConvertible equConvert)
|
if (able is IConvertEquation equConvert)
|
||||||
{
|
{
|
||||||
ToolStripMenuItem equItem = new()
|
ToolStripMenuItem equItem = new()
|
||||||
{
|
{
|
||||||
@ -418,11 +419,25 @@ public partial class GraphForm : Form
|
|||||||
};
|
};
|
||||||
equItem.Click += (o, e) =>
|
equItem.Click += (o, e) =>
|
||||||
{
|
{
|
||||||
Ungraph(able);
|
if (equConvert.UngraphWhenConvertedToEquation) Ungraph(able);
|
||||||
Graph(equConvert.ToEquation());
|
Graph(equConvert.ToEquation());
|
||||||
};
|
};
|
||||||
MenuConvertEquation.DropDownItems.Add(equItem);
|
MenuConvertEquation.DropDownItems.Add(equItem);
|
||||||
}
|
}
|
||||||
|
if (able is IConvertSlopeField sfConvert)
|
||||||
|
{
|
||||||
|
ToolStripMenuItem sfItem = new()
|
||||||
|
{
|
||||||
|
ForeColor = able.Color,
|
||||||
|
Text = able.Name
|
||||||
|
};
|
||||||
|
sfItem.Click += (o, e) =>
|
||||||
|
{
|
||||||
|
if (sfConvert.UngraphWhenConvertedToSlopeField) Ungraph(able);
|
||||||
|
Graph(sfConvert.ToSlopeField(2));
|
||||||
|
};
|
||||||
|
MenuConvertSlopeField.DropDownItems.Add(sfItem);
|
||||||
|
}
|
||||||
if (able is ITranslatable translatable)
|
if (able is ITranslatable translatable)
|
||||||
{
|
{
|
||||||
ToolStripMenuItem transItem = new()
|
ToolStripMenuItem transItem = new()
|
||||||
@ -538,8 +553,6 @@ public partial class GraphForm : Form
|
|||||||
Version curVersion = Version.Parse(Assembly.GetAssembly(typeof(GraphForm))!.FullName!.Split(',')[1].Trim()[8..^2]);
|
Version curVersion = Version.Parse(Assembly.GetAssembly(typeof(GraphForm))!.FullName!.Split(',')[1].Trim()[8..^2]);
|
||||||
Version newVersion = Version.Parse(latest["tag_name"]!.GetValue<string>());
|
Version newVersion = Version.Parse(latest["tag_name"]!.GetValue<string>());
|
||||||
|
|
||||||
curVersion = Version.Parse("1.0.0");
|
|
||||||
|
|
||||||
if (newVersion > curVersion)
|
if (newVersion > curVersion)
|
||||||
{
|
{
|
||||||
// Updates are required.
|
// Updates are required.
|
||||||
|
|||||||
@ -6,10 +6,12 @@ using System.Collections.Generic;
|
|||||||
|
|
||||||
namespace Graphing.Graphables;
|
namespace Graphing.Graphables;
|
||||||
|
|
||||||
public class Equation : Graphable, IIntegrable, IDerivable, ITranslatableXY
|
public class Equation : Graphable, IIntegrable, IDerivable, ITranslatableXY, IConvertSlopeField
|
||||||
{
|
{
|
||||||
private static int equationNum;
|
private static int equationNum;
|
||||||
|
|
||||||
|
public bool UngraphWhenConvertedToSlopeField => false;
|
||||||
|
|
||||||
public double OffsetX { get; set; }
|
public double OffsetX { get; set; }
|
||||||
public double OffsetY { get; set; }
|
public double OffsetY { get; set; }
|
||||||
|
|
||||||
@ -60,15 +62,23 @@ public class Equation : Graphable, IIntegrable, IDerivable, ITranslatableXY
|
|||||||
return lines;
|
return lines;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Graphable Derive() => new Equation(x =>
|
protected double DerivativeAtPoint(double x)
|
||||||
{
|
{
|
||||||
const double step = 1e-3;
|
const double step = 1e-3;
|
||||||
return (equ(x + step) - equ(x)) / step;
|
return (equ(x + step) - equ(x)) / step;
|
||||||
});
|
}
|
||||||
|
|
||||||
|
public Graphable Derive() => new Equation(DerivativeAtPoint);
|
||||||
public Graphable Integrate() => new IntegralEquation(this);
|
public Graphable Integrate() => new IntegralEquation(this);
|
||||||
|
|
||||||
public EquationDelegate GetDelegate() => equ;
|
public EquationDelegate GetDelegate() => equ;
|
||||||
|
|
||||||
|
public SlopeField ToSlopeField(int detail) => new(detail, (x, y) => DerivativeAtPoint(x))
|
||||||
|
{
|
||||||
|
Color = Color,
|
||||||
|
Name = $"Slope Field of {Name}"
|
||||||
|
};
|
||||||
|
|
||||||
public override void EraseCache() => cache.Clear();
|
public override void EraseCache() => cache.Clear();
|
||||||
protected double GetFromCache(double x, double epsilon)
|
protected double GetFromCache(double x, double epsilon)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -5,8 +5,10 @@ using System.Collections.Generic;
|
|||||||
|
|
||||||
namespace Graphing.Graphables;
|
namespace Graphing.Graphables;
|
||||||
|
|
||||||
public class EquationDifference : Graphable, ITranslatableX, IEquationConvertible
|
public class EquationDifference : Graphable, ITranslatableX, IConvertEquation
|
||||||
{
|
{
|
||||||
|
public bool UngraphWhenConvertedToEquation => true;
|
||||||
|
|
||||||
public double Position
|
public double Position
|
||||||
{
|
{
|
||||||
get => _position;
|
get => _position;
|
||||||
|
|||||||
@ -6,8 +6,10 @@ using System.Collections.Generic;
|
|||||||
|
|
||||||
namespace Graphing.Graphables;
|
namespace Graphing.Graphables;
|
||||||
|
|
||||||
public class TangentLine : Graphable, IEquationConvertible, ITranslatableX
|
public class TangentLine : Graphable, IConvertEquation, ITranslatableX
|
||||||
{
|
{
|
||||||
|
public bool UngraphWhenConvertedToEquation => true;
|
||||||
|
|
||||||
public double Position
|
public double Position
|
||||||
{
|
{
|
||||||
get => _position;
|
get => _position;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user