Improved conversions. You choose whether to remove the original.
This commit is contained in:
parent
d19c7a3fc3
commit
e5c985c060
@ -2,7 +2,9 @@
|
||||
|
||||
namespace Graphing.Abstract;
|
||||
|
||||
public interface IEquationConvertible
|
||||
public interface IConvertEquation
|
||||
{
|
||||
public bool UngraphWhenConvertedToEquation { get; }
|
||||
|
||||
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();
|
||||
MenuOperationsDerivative = new ToolStripMenuItem();
|
||||
MenuOperationsIntegral = new ToolStripMenuItem();
|
||||
MenuOperationsTranslate = new ToolStripMenuItem();
|
||||
MenuConvert = new ToolStripMenuItem();
|
||||
MenuConvertEquation = new ToolStripMenuItem();
|
||||
MenuMisc = new ToolStripMenuItem();
|
||||
MenuMiscCaches = new ToolStripMenuItem();
|
||||
MiscMenuPreload = new ToolStripMenuItem();
|
||||
MenuOperationsTranslate = new ToolStripMenuItem();
|
||||
MenuConvertSlopeField = new ToolStripMenuItem();
|
||||
GraphMenu.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
@ -121,13 +122,13 @@ namespace Graphing.Forms
|
||||
// MenuElementsColors
|
||||
//
|
||||
MenuElementsColors.Name = "MenuElementsColors";
|
||||
MenuElementsColors.Size = new Size(359, 44);
|
||||
MenuElementsColors.Size = new Size(233, 44);
|
||||
MenuElementsColors.Text = "Colors";
|
||||
//
|
||||
// MenuElementsRemove
|
||||
//
|
||||
MenuElementsRemove.Name = "MenuElementsRemove";
|
||||
MenuElementsRemove.Size = new Size(359, 44);
|
||||
MenuElementsRemove.Size = new Size(233, 44);
|
||||
MenuElementsRemove.Text = "Remove";
|
||||
//
|
||||
// MenuOperations
|
||||
@ -149,9 +150,15 @@ namespace Graphing.Forms
|
||||
MenuOperationsIntegral.Size = new Size(360, 44);
|
||||
MenuOperationsIntegral.Text = "Compute Integral";
|
||||
//
|
||||
// MenuOperationsTranslate
|
||||
//
|
||||
MenuOperationsTranslate.Name = "MenuOperationsTranslate";
|
||||
MenuOperationsTranslate.Size = new Size(360, 44);
|
||||
MenuOperationsTranslate.Text = "Translate";
|
||||
//
|
||||
// MenuConvert
|
||||
//
|
||||
MenuConvert.DropDownItems.AddRange(new ToolStripItem[] { MenuConvertEquation });
|
||||
MenuConvert.DropDownItems.AddRange(new ToolStripItem[] { MenuConvertEquation, MenuConvertSlopeField });
|
||||
MenuConvert.Name = "MenuConvert";
|
||||
MenuConvert.Size = new Size(118, 38);
|
||||
MenuConvert.Text = "Convert";
|
||||
@ -159,7 +166,7 @@ namespace Graphing.Forms
|
||||
// MenuConvertEquation
|
||||
//
|
||||
MenuConvertEquation.Name = "MenuConvertEquation";
|
||||
MenuConvertEquation.Size = new Size(273, 44);
|
||||
MenuConvertEquation.Size = new Size(359, 44);
|
||||
MenuConvertEquation.Text = "To Equation";
|
||||
//
|
||||
// MenuMisc
|
||||
@ -183,11 +190,11 @@ namespace Graphing.Forms
|
||||
MiscMenuPreload.Text = "Preload Cache";
|
||||
MiscMenuPreload.Click += MiscMenuPreload_Click;
|
||||
//
|
||||
// MenuOperationsTranslate
|
||||
// MenuConvertSlopeField
|
||||
//
|
||||
MenuOperationsTranslate.Name = "MenuOperationsTranslate";
|
||||
MenuOperationsTranslate.Size = new Size(360, 44);
|
||||
MenuOperationsTranslate.Text = "Translate";
|
||||
MenuConvertSlopeField.Name = "MenuConvertSlopeField";
|
||||
MenuConvertSlopeField.Size = new Size(359, 44);
|
||||
MenuConvertSlopeField.Text = "To Slope Field";
|
||||
//
|
||||
// GraphForm
|
||||
//
|
||||
@ -226,5 +233,6 @@ namespace Graphing.Forms
|
||||
private ToolStripMenuItem MenuElementsColors;
|
||||
private ToolStripMenuItem MenuElementsRemove;
|
||||
private ToolStripMenuItem MenuOperationsTranslate;
|
||||
private ToolStripMenuItem MenuConvertSlopeField;
|
||||
}
|
||||
}
|
||||
@ -369,6 +369,7 @@ public partial class GraphForm : Form
|
||||
MenuOperationsDerivative.DropDownItems.Clear();
|
||||
MenuOperationsIntegral.DropDownItems.Clear();
|
||||
MenuConvertEquation.DropDownItems.Clear();
|
||||
MenuConvertSlopeField.DropDownItems.Clear();
|
||||
MenuOperationsTranslate.DropDownItems.Clear();
|
||||
|
||||
foreach (Graphable able in ables)
|
||||
@ -409,7 +410,7 @@ public partial class GraphForm : Form
|
||||
integralItem.Click += (o, e) => Graph(integrable.Integrate());
|
||||
MenuOperationsIntegral.DropDownItems.Add(integralItem);
|
||||
}
|
||||
if (able is IEquationConvertible equConvert)
|
||||
if (able is IConvertEquation equConvert)
|
||||
{
|
||||
ToolStripMenuItem equItem = new()
|
||||
{
|
||||
@ -418,11 +419,25 @@ public partial class GraphForm : Form
|
||||
};
|
||||
equItem.Click += (o, e) =>
|
||||
{
|
||||
Ungraph(able);
|
||||
if (equConvert.UngraphWhenConvertedToEquation) Ungraph(able);
|
||||
Graph(equConvert.ToEquation());
|
||||
};
|
||||
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)
|
||||
{
|
||||
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 newVersion = Version.Parse(latest["tag_name"]!.GetValue<string>());
|
||||
|
||||
curVersion = Version.Parse("1.0.0");
|
||||
|
||||
if (newVersion > curVersion)
|
||||
{
|
||||
// Updates are required.
|
||||
|
||||
@ -6,10 +6,12 @@ using System.Collections.Generic;
|
||||
|
||||
namespace Graphing.Graphables;
|
||||
|
||||
public class Equation : Graphable, IIntegrable, IDerivable, ITranslatableXY
|
||||
public class Equation : Graphable, IIntegrable, IDerivable, ITranslatableXY, IConvertSlopeField
|
||||
{
|
||||
private static int equationNum;
|
||||
|
||||
public bool UngraphWhenConvertedToSlopeField => false;
|
||||
|
||||
public double OffsetX { get; set; }
|
||||
public double OffsetY { get; set; }
|
||||
|
||||
@ -60,15 +62,23 @@ public class Equation : Graphable, IIntegrable, IDerivable, ITranslatableXY
|
||||
return lines;
|
||||
}
|
||||
|
||||
public Graphable Derive() => new Equation(x =>
|
||||
protected double DerivativeAtPoint(double x)
|
||||
{
|
||||
const double step = 1e-3;
|
||||
return (equ(x + step) - equ(x)) / step;
|
||||
});
|
||||
}
|
||||
|
||||
public Graphable Derive() => new Equation(DerivativeAtPoint);
|
||||
public Graphable Integrate() => new IntegralEquation(this);
|
||||
|
||||
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();
|
||||
protected double GetFromCache(double x, double epsilon)
|
||||
{
|
||||
|
||||
@ -5,8 +5,10 @@ using System.Collections.Generic;
|
||||
|
||||
namespace Graphing.Graphables;
|
||||
|
||||
public class EquationDifference : Graphable, ITranslatableX, IEquationConvertible
|
||||
public class EquationDifference : Graphable, ITranslatableX, IConvertEquation
|
||||
{
|
||||
public bool UngraphWhenConvertedToEquation => true;
|
||||
|
||||
public double Position
|
||||
{
|
||||
get => _position;
|
||||
|
||||
@ -6,8 +6,10 @@ using System.Collections.Generic;
|
||||
|
||||
namespace Graphing.Graphables;
|
||||
|
||||
public class TangentLine : Graphable, IEquationConvertible, ITranslatableX
|
||||
public class TangentLine : Graphable, IConvertEquation, ITranslatableX
|
||||
{
|
||||
public bool UngraphWhenConvertedToEquation => true;
|
||||
|
||||
public double Position
|
||||
{
|
||||
get => _position;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user