Improved conversions. You choose whether to remove the original.

This commit is contained in:
That_One_Nerd 2024-04-02 09:37:45 -04:00
parent d19c7a3fc3
commit e5c985c060
7 changed files with 66 additions and 19 deletions

View File

@ -2,7 +2,9 @@
namespace Graphing.Abstract;
public interface IEquationConvertible
public interface IConvertEquation
{
public bool UngraphWhenConvertedToEquation { get; }
public Equation ToEquation();
}

View File

@ -0,0 +1,10 @@
using Graphing.Graphables;
namespace Graphing.Abstract;
public interface IConvertSlopeField
{
public bool UngraphWhenConvertedToSlopeField { get; }
public SlopeField ToSlopeField(int detail);
}

View File

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

View File

@ -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.

View File

@ -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)
{

View File

@ -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;

View File

@ -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;