Slope field works with decimals now.

This commit is contained in:
That_One_Nerd 2024-04-24 08:42:32 -04:00
parent ed4ce2bbeb
commit ea9d2cd3b6
3 changed files with 24 additions and 15 deletions

View File

@ -72,7 +72,7 @@ namespace Graphing.Forms
GraphMenu.Items.AddRange(new ToolStripItem[] { MenuViewport, MenuElements, MenuOperations, MenuConvert, MenuMisc }); GraphMenu.Items.AddRange(new ToolStripItem[] { MenuViewport, MenuElements, MenuOperations, MenuConvert, MenuMisc });
GraphMenu.Location = new Point(0, 0); GraphMenu.Location = new Point(0, 0);
GraphMenu.Name = "GraphMenu"; GraphMenu.Name = "GraphMenu";
GraphMenu.Size = new Size(1449, 40); GraphMenu.Size = new Size(1449, 42);
GraphMenu.TabIndex = 1; GraphMenu.TabIndex = 1;
GraphMenu.Text = "menuStrip1"; GraphMenu.Text = "menuStrip1";
// //
@ -80,7 +80,7 @@ namespace Graphing.Forms
// //
MenuViewport.DropDownItems.AddRange(new ToolStripItem[] { ButtonViewportSetZoom, ButtonViewportSetCenter, ButtonViewportReset, ButtonViewportResetWindow }); MenuViewport.DropDownItems.AddRange(new ToolStripItem[] { ButtonViewportSetZoom, ButtonViewportSetCenter, ButtonViewportReset, ButtonViewportResetWindow });
MenuViewport.Name = "MenuViewport"; MenuViewport.Name = "MenuViewport";
MenuViewport.Size = new Size(129, 36); MenuViewport.Size = new Size(129, 38);
MenuViewport.Text = "Viewport"; MenuViewport.Text = "Viewport";
// //
// ButtonViewportSetZoom // ButtonViewportSetZoom
@ -115,7 +115,7 @@ namespace Graphing.Forms
// //
MenuElements.DropDownItems.AddRange(new ToolStripItem[] { MenuElementsColors, MenuElementsRemove }); MenuElements.DropDownItems.AddRange(new ToolStripItem[] { MenuElementsColors, MenuElementsRemove });
MenuElements.Name = "MenuElements"; MenuElements.Name = "MenuElements";
MenuElements.Size = new Size(131, 36); MenuElements.Size = new Size(131, 38);
MenuElements.Text = "Elements"; MenuElements.Text = "Elements";
// //
// MenuElementsColors // MenuElementsColors
@ -134,7 +134,7 @@ namespace Graphing.Forms
// //
MenuOperations.DropDownItems.AddRange(new ToolStripItem[] { MenuOperationsDerivative, MenuOperationsIntegral, MenuOperationsTranslate }); MenuOperations.DropDownItems.AddRange(new ToolStripItem[] { MenuOperationsDerivative, MenuOperationsIntegral, MenuOperationsTranslate });
MenuOperations.Name = "MenuOperations"; MenuOperations.Name = "MenuOperations";
MenuOperations.Size = new Size(151, 36); MenuOperations.Size = new Size(151, 38);
MenuOperations.Text = "Operations"; MenuOperations.Text = "Operations";
// //
// MenuOperationsDerivative // MenuOperationsDerivative
@ -159,26 +159,26 @@ namespace Graphing.Forms
// //
MenuConvert.DropDownItems.AddRange(new ToolStripItem[] { MenuConvertEquation, MenuConvertSlopeField }); MenuConvert.DropDownItems.AddRange(new ToolStripItem[] { MenuConvertEquation, MenuConvertSlopeField });
MenuConvert.Name = "MenuConvert"; MenuConvert.Name = "MenuConvert";
MenuConvert.Size = new Size(118, 36); MenuConvert.Size = new Size(118, 38);
MenuConvert.Text = "Convert"; MenuConvert.Text = "Convert";
// //
// MenuConvertEquation // MenuConvertEquation
// //
MenuConvertEquation.Name = "MenuConvertEquation"; MenuConvertEquation.Name = "MenuConvertEquation";
MenuConvertEquation.Size = new Size(297, 44); MenuConvertEquation.Size = new Size(359, 44);
MenuConvertEquation.Text = "To Equation"; MenuConvertEquation.Text = "To Equation";
// //
// MenuConvertSlopeField // MenuConvertSlopeField
// //
MenuConvertSlopeField.Name = "MenuConvertSlopeField"; MenuConvertSlopeField.Name = "MenuConvertSlopeField";
MenuConvertSlopeField.Size = new Size(297, 44); MenuConvertSlopeField.Size = new Size(359, 44);
MenuConvertSlopeField.Text = "To Slope Field"; MenuConvertSlopeField.Text = "To Slope Field";
// //
// MenuMisc // MenuMisc
// //
MenuMisc.DropDownItems.AddRange(new ToolStripItem[] { MenuMiscCaches, MiscMenuPreload }); MenuMisc.DropDownItems.AddRange(new ToolStripItem[] { MenuMiscCaches, MiscMenuPreload });
MenuMisc.Name = "MenuMisc"; MenuMisc.Name = "MenuMisc";
MenuMisc.Size = new Size(83, 36); MenuMisc.Size = new Size(83, 38);
MenuMisc.Text = "Misc"; MenuMisc.Text = "Misc";
// //
// MenuMiscCaches // MenuMiscCaches

View File

@ -11,11 +11,11 @@ public class SlopeField : Graphable
private static int slopeFieldNum; private static int slopeFieldNum;
protected readonly SlopeFieldsDelegate equ; protected readonly SlopeFieldsDelegate equ;
protected readonly int detail; protected readonly double detail;
protected readonly List<(Float2, GraphLine)> cache; protected readonly List<(Float2, GraphLine)> cache;
public SlopeField(int detail, SlopeFieldsDelegate equ) public SlopeField(double detail, SlopeFieldsDelegate equ)
{ {
slopeFieldNum++; slopeFieldNum++;
Name = $"Slope Field {slopeFieldNum}"; Name = $"Slope Field {slopeFieldNum}";
@ -27,12 +27,18 @@ public class SlopeField : Graphable
public override IEnumerable<IGraphPart> GetItemsToRender(in GraphForm graph) public override IEnumerable<IGraphPart> GetItemsToRender(in GraphForm graph)
{ {
double epsilon = 1 / (detail * 2.0); double step = 1 / detail;
double epsilon = step * 0.5;
List<IGraphPart> lines = []; List<IGraphPart> lines = [];
for (double x = Math.Ceiling(graph.MinVisibleGraph.x - 1); x < graph.MaxVisibleGraph.x + 1; x += 1.0 / detail) double minX = Math.Round((graph.MinVisibleGraph.x - 1) / step) * step,
maxX = Math.Round((graph.MaxVisibleGraph.x + 1) / step) * step,
minY = Math.Round((graph.MinVisibleGraph.y - 1) / step) * step,
maxY = Math.Round((graph.MaxVisibleGraph.y + 1) / step) * step;
for (double x = minX; x < maxX; x += step)
{ {
for (double y = Math.Ceiling(graph.MinVisibleGraph.y - 1); y < graph.MaxVisibleGraph.y + 1; y += 1.0 / detail) for (double y = minY; y < maxY; y += step)
{ {
lines.Add(GetFromCache(epsilon, x, y)); lines.Add(GetFromCache(epsilon, x, y));
} }

View File

@ -16,12 +16,15 @@ internal static class Program
GraphForm graph = new("One Of The Graphing Calculators Of All Time"); GraphForm graph = new("One Of The Graphing Calculators Of All Time");
Equation equA = new(Math.Sin), /*Equation equA = new(Math.Sin),
equB = new(Math.Cos); equB = new(Math.Cos);
EquationDifference diff = new(2, equA, equB); EquationDifference diff = new(2, equA, equB);
ParametricEquation equC = new(0, 20, t => 0.0375 * t * Math.Cos(t), t => 0.0625 * t * Math.Sin(t) + 3); ParametricEquation equC = new(0, 20, t => 0.0375 * t * Math.Cos(t), t => 0.0625 * t * Math.Sin(t) + 3);
TangentLine tanA = new(2, 2, equA); TangentLine tanA = new(2, 2, equA);
graph.Graph(equA, equB, diff, equC, equB.ToColumnTable(-3, 3, 2), tanA); graph.Graph(equA, equB, diff, equC, equB.ToColumnTable(-3, 3, 2), tanA);*/
SlopeField sf1 = new(1.5, (x, y) => Math.Cos(x) + Math.Sin(y));
graph.Graph(sf1);
Application.Run(graph); Application.Run(graph);
} }