- TrendGraph에 trendline 추가

This commit is contained in:
2017-06-20 05:44:31 +09:00
parent 760ce6abc2
commit 9bf6a38f6d
5 changed files with 203 additions and 29 deletions

26
MainForm.Designer.cs generated
View File

@@ -76,7 +76,7 @@
this.toolStripMain.Location = new System.Drawing.Point(0, 24); this.toolStripMain.Location = new System.Drawing.Point(0, 24);
this.toolStripMain.Name = "toolStripMain"; this.toolStripMain.Name = "toolStripMain";
this.toolStripMain.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional; this.toolStripMain.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional;
this.toolStripMain.Size = new System.Drawing.Size(947, 25); this.toolStripMain.Size = new System.Drawing.Size(1184, 25);
this.toolStripMain.TabIndex = 0; this.toolStripMain.TabIndex = 0;
this.toolStripMain.Text = "toolStrip1"; this.toolStripMain.Text = "toolStrip1";
// //
@@ -165,9 +165,9 @@
// //
this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripStatusLabel}); this.toolStripStatusLabel});
this.statusStrip.Location = new System.Drawing.Point(0, 623); this.statusStrip.Location = new System.Drawing.Point(0, 739);
this.statusStrip.Name = "statusStrip"; this.statusStrip.Name = "statusStrip";
this.statusStrip.Size = new System.Drawing.Size(947, 22); this.statusStrip.Size = new System.Drawing.Size(1184, 22);
this.statusStrip.TabIndex = 1; this.statusStrip.TabIndex = 1;
this.statusStrip.Text = "statusStrip1"; this.statusStrip.Text = "statusStrip1";
// //
@@ -187,7 +187,7 @@
this.reportToolStripMenuItem}); this.reportToolStripMenuItem});
this.menuStrip.Location = new System.Drawing.Point(0, 0); this.menuStrip.Location = new System.Drawing.Point(0, 0);
this.menuStrip.Name = "menuStrip"; this.menuStrip.Name = "menuStrip";
this.menuStrip.Size = new System.Drawing.Size(947, 24); this.menuStrip.Size = new System.Drawing.Size(1184, 24);
this.menuStrip.TabIndex = 3; this.menuStrip.TabIndex = 3;
this.menuStrip.Text = "menuStrip1"; this.menuStrip.Text = "menuStrip1";
// //
@@ -204,20 +204,20 @@
// openDBToolStripMenuItem // openDBToolStripMenuItem
// //
this.openDBToolStripMenuItem.Name = "openDBToolStripMenuItem"; this.openDBToolStripMenuItem.Name = "openDBToolStripMenuItem";
this.openDBToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.openDBToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
this.openDBToolStripMenuItem.Text = "Open DB"; this.openDBToolStripMenuItem.Text = "Open DB";
this.openDBToolStripMenuItem.Click += new System.EventHandler(this.openDBToolStripMenuItem_Click); this.openDBToolStripMenuItem.Click += new System.EventHandler(this.openDBToolStripMenuItem_Click);
// //
// recentToolStripMenuItem // recentToolStripMenuItem
// //
this.recentToolStripMenuItem.Name = "recentToolStripMenuItem"; this.recentToolStripMenuItem.Name = "recentToolStripMenuItem";
this.recentToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.recentToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
this.recentToolStripMenuItem.Text = "Recent"; this.recentToolStripMenuItem.Text = "Recent";
// //
// exitToolStripMenuItem // exitToolStripMenuItem
// //
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
this.exitToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.exitToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
this.exitToolStripMenuItem.Text = "Exit"; this.exitToolStripMenuItem.Text = "Exit";
this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
// //
@@ -233,14 +233,14 @@
// resultTableToolStripMenuItem // resultTableToolStripMenuItem
// //
this.resultTableToolStripMenuItem.Name = "resultTableToolStripMenuItem"; this.resultTableToolStripMenuItem.Name = "resultTableToolStripMenuItem";
this.resultTableToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.resultTableToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
this.resultTableToolStripMenuItem.Text = "Result Table"; this.resultTableToolStripMenuItem.Text = "Result Table";
this.resultTableToolStripMenuItem.Click += new System.EventHandler(this.resultTableToolStripMenuItem_Click); this.resultTableToolStripMenuItem.Click += new System.EventHandler(this.resultTableToolStripMenuItem_Click);
// //
// analysisTableToolStripMenuItem // analysisTableToolStripMenuItem
// //
this.analysisTableToolStripMenuItem.Name = "analysisTableToolStripMenuItem"; this.analysisTableToolStripMenuItem.Name = "analysisTableToolStripMenuItem";
this.analysisTableToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.analysisTableToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
this.analysisTableToolStripMenuItem.Text = "Analysis Table"; this.analysisTableToolStripMenuItem.Text = "Analysis Table";
this.analysisTableToolStripMenuItem.Click += new System.EventHandler(this.analysisTableToolStripMenuItem_Click); this.analysisTableToolStripMenuItem.Click += new System.EventHandler(this.analysisTableToolStripMenuItem_Click);
// //
@@ -256,7 +256,7 @@
// radarGraphToolStripMenuItem // radarGraphToolStripMenuItem
// //
this.radarGraphToolStripMenuItem.Name = "radarGraphToolStripMenuItem"; this.radarGraphToolStripMenuItem.Name = "radarGraphToolStripMenuItem";
this.radarGraphToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.radarGraphToolStripMenuItem.Size = new System.Drawing.Size(140, 22);
this.radarGraphToolStripMenuItem.Text = "Radar Graph"; this.radarGraphToolStripMenuItem.Text = "Radar Graph";
this.radarGraphToolStripMenuItem.Click += new System.EventHandler(this.radarGraphToolStripMenuItem_Click); this.radarGraphToolStripMenuItem.Click += new System.EventHandler(this.radarGraphToolStripMenuItem_Click);
// //
@@ -264,7 +264,7 @@
// //
this.trendGraphToolStripMenuItem.Enabled = false; this.trendGraphToolStripMenuItem.Enabled = false;
this.trendGraphToolStripMenuItem.Name = "trendGraphToolStripMenuItem"; this.trendGraphToolStripMenuItem.Name = "trendGraphToolStripMenuItem";
this.trendGraphToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.trendGraphToolStripMenuItem.Size = new System.Drawing.Size(140, 22);
this.trendGraphToolStripMenuItem.Text = "Trend Graph"; this.trendGraphToolStripMenuItem.Text = "Trend Graph";
this.trendGraphToolStripMenuItem.Click += new System.EventHandler(this.trendGraphToolStripMenuItem_Click); this.trendGraphToolStripMenuItem.Click += new System.EventHandler(this.trendGraphToolStripMenuItem_Click);
// //
@@ -288,14 +288,14 @@
this.dockPanel.DocumentStyle = WeifenLuo.WinFormsUI.Docking.DocumentStyle.DockingWindow; this.dockPanel.DocumentStyle = WeifenLuo.WinFormsUI.Docking.DocumentStyle.DockingWindow;
this.dockPanel.Location = new System.Drawing.Point(0, 49); this.dockPanel.Location = new System.Drawing.Point(0, 49);
this.dockPanel.Name = "dockPanel"; this.dockPanel.Name = "dockPanel";
this.dockPanel.Size = new System.Drawing.Size(947, 574); this.dockPanel.Size = new System.Drawing.Size(1184, 690);
this.dockPanel.TabIndex = 2; this.dockPanel.TabIndex = 2;
// //
// MainForm // MainForm
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(947, 645); this.ClientSize = new System.Drawing.Size(1184, 761);
this.Controls.Add(this.dockPanel); this.Controls.Add(this.dockPanel);
this.Controls.Add(this.statusStrip); this.Controls.Add(this.statusStrip);
this.Controls.Add(this.toolStripMain); this.Controls.Add(this.toolStripMain);

View File

@@ -166,24 +166,24 @@
<data name="toolStripButtonRadarGraph.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="toolStripButtonRadarGraph.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFdSURBVDhPYxh8wGfmJi6fSbtLfSfuPu85cffPyP27/hcd YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFdSURBVDhPYxh8wGfmJi6fSbtLfSfuPu8xcffPyP27/hcd
OvI1a/uRTZlbDgtClWEHXlP2yvv2774O1PwfhlOOHvhfdeE0GBcfO/EjZeN+C6hyVACyGV0zCOedOgo3 PPw1a/uRTZlbDgtClWEHXlP2yvv2774O1PwfhlOOHvhfdeE0GBcfO/EjZeN+C6hyVACyGV0zCOedOgo3
AGZI6O4z/FBtCOA7YU8Zumbvvp1X848d/45sAAhn7Dy2AaoNAYC2X0AxYNLOBKgUQ/qOw7ORDSg6eOQr AGZI6O4z/FBtCOA7YU8Zumbvvp1X848d/45sAAhn7Dy2AaoNAYC2X0AxYNLOBKgUQ/qOw7ORDSg6cPgr
VAoBQAGGbDNUGA5ATocZUHnu1H+oMAIgG+A1cdcVqDAE/P/PuPbBmx+7X33+v/XFp/+rn77HNMC7f8c5 VAoBQAGGbDNUGA5ATocZUHnu1H+oMAIgG+A1cdcVqDAE/P/PuObBmx+7X33+v/XFp/+rn77HNMC7f8c5
mAEg7DNhVyJUiqF80/m2w2+//ofhtXdefYFKIYDPxN1FyAZA8TUwnrD7f/nmi3ADpp1+sBaqDQFCeo9x mAEg7DNhVyJUiqF80/m2w2+//ofhtXdefYFKIYDPxN1FyAZA8TUwnrD7f/nmi3ADpp1+sBaqDQFCeo9x
gpyOZgAce0/Y9T99+cn/62+9/l5/4hYfVBsq8JmwWw6fIW69O24mzdlvAlWOHdjP388B8c6us77927+D gpyOZgAce0/Y9T99+cn/62++/l5/4hYfVBsq8JmwWw6fIW69O24mzdlvAlWOHdjP388B8c6us779276D
8cTdZ4D8ApAcVNmgAQwMAPD6PoBbdDtHAAAAAElFTkSuQmCC 8cTdZ4D8ApAcVNmgAQwMANmePnUCkMyWAAAAAElFTkSuQmCC
</value> </value>
</data> </data>
<data name="toolStripButtonTrendGraph.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="toolStripButtonTrendGraph.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEpSURBVDhPY6A7COk9xuk1Za88lIsdBE7bKeY7aac1lIsC YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEpSURBVDhPY6A7COk9xuk1Za88lIsdBE7bKeY7aac1lIsC
/CbtXunbu/2fV/8uTagQJvCdtHuT78Td//2n7DSACoHB8RefxTsP3rruM2Hnbv/+/QJQYUww6eitw3Hz /CbtXunbs+2fV/8uTagQJvCdtHuT78Td//2n7DSACoHB8RefxTsP3rruM2Hnbv/+/QJQYUww6eitw3Hz
D23d8+LDgcNvPrvaz9/PceDtZ91Dr7+sKD17Vqrq/MlAqFJMcOjNl7pNj14EVJ47ZQ/iL732vNunf8ev D23d8+LDgcNvPrvaz9/PceDtZ91Dr7+sKD17Vqrq/MlAqFJMcOjNl7pNj14EVJ47ZQ/iL732vNunb/uv
vDUnL4H45edO6FedPz0BxMYAB998DT785msOsiK/ybukAibte+IzcVc1iI/VALfeHULBk/ccb9595QCI vDUnL4H45edO6FedPz0BxMYAB998DT785msOsiK/ybukAibte+IzcVc1iI/VALfeHULBk/ccb9595QCI
j66o8vyZgKrzx6RBbKwGgELUc+Luv74Tdi0B8TEMuHC6H+hvcIBiNQAE0nccds3YeVQMxCbLAHyKRooB j66o8vyZgKrzx6RBbKwGgELUY+Luv74Tdi0B8TEMuHC6H+hvcIBiNQAE0nccds3YeVQMxCbLAHyKRooB
oBRWeOwYJ4hdf38/ByzaQACfHIWAgQEAN6n9aWy7jOIAAAAASUVORK5CYII= oBRWeOwYJ4hdf38/ByzaQACfHIWAgQEAKbL9ZOjCSnkAAAAASUVORK5CYII=
</value> </value>
</data> </data>
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">

View File

@@ -12,6 +12,7 @@ using LiveCharts;
using LiveCharts.Wpf; using LiveCharts.Wpf;
using LiveCharts.WinForms; using LiveCharts.WinForms;
using LiveCharts.Defaults; using LiveCharts.Defaults;
using System.Windows.Media;
namespace friction namespace friction
{ {
@@ -49,6 +50,42 @@ namespace friction
Title = "RPN", Title = "RPN",
MinValue = 0, MinValue = 0,
MaxValue = 10, MaxValue = 10,
Sections = new SectionsCollection
{
new AxisSection
{
Value = 5,
SectionWidth = 5,
Fill = new SolidColorBrush
{
Color = System.Windows.Media.Color.FromArgb(Theme.Red.A, Theme.Red.R, Theme.Red.G, Theme.Red.B),
Opacity = .75
}
},
new AxisSection
{
//Label = "Good",
Value = 3,
SectionWidth = 2,
Fill = new SolidColorBrush
{
Color = System.Windows.Media.Color.FromArgb(Theme.Yellow.A, Theme.Yellow.R, Theme.Yellow.G, Theme.Yellow.B),
Opacity = .75
}
},
new AxisSection
{
//Label = "Bad",
Value = 0,
SectionWidth = 3,
Fill = new SolidColorBrush
{
Color = System.Windows.Media.Color.FromArgb(Theme.Green.A, Theme.Green.R, Theme.Green.G, Theme.Green.B),
Opacity = .75
}
}
}
}); });
trendChart.LegendLocation = LegendLocation.Right; trendChart.LegendLocation = LegendLocation.Right;
@@ -93,20 +130,33 @@ namespace friction
new ChartValues<ScatterPoint>(), new ChartValues<ScatterPoint>(),
new ChartValues<ScatterPoint>() }; new ChartValues<ScatterPoint>() };
var Values = new List<TrendLine.POINT>();
foreach (var pnt in Chart) foreach (var pnt in Chart)
{ {
if(pnt.TEMPERATURE < 0) if(pnt.TEMPERATURE < 0)
Points[0].Add(new ScatterPoint(pnt.HUMIDITY, pnt.RPN)); Points[0].Add(new ScatterPoint(pnt.HUMIDITY, pnt.RPN, 2));
else if(pnt.TEMPERATURE > 30) else if(pnt.TEMPERATURE > 30)
Points[2].Add(new ScatterPoint(pnt.HUMIDITY, pnt.RPN)); Points[2].Add(new ScatterPoint(pnt.HUMIDITY, pnt.RPN, 2));
else else
Points[1].Add(new ScatterPoint(pnt.HUMIDITY, pnt.RPN)); Points[1].Add(new ScatterPoint(pnt.HUMIDITY, pnt.RPN, 2));
Values.Add(new TrendLine.POINT { X = pnt.HUMIDITY, Y = pnt.RPN });
} }
Values.Sort((a, b) => (a.X == b.X) ? 0 : (a.X < b.X) ? -1 : 1);
TrendLine trendline = new TrendLine(Values);
ChartValues<ScatterPoint> TrendPoints = new ChartValues<ScatterPoint>();
TrendPoints.Add(new ScatterPoint(Values[0].X, trendline.GetY(Values[0].X)));
TrendPoints.Add(new ScatterPoint(Values[Values.Count / 2].X, trendline.GetY(Values[Values.Count / 2].X)));
TrendPoints.Add(new ScatterPoint(Values[Values.Count - 1].X, trendline.GetY(Values[Values.Count - 1].X)));
System.Windows.Media.SolidColorBrush[] brushes = { System.Windows.Media.SolidColorBrush[] brushes = {
System.Windows.Media.Brushes.DodgerBlue.Clone(), System.Windows.Media.Brushes.DodgerBlue.Clone(),
System.Windows.Media.Brushes.Green.Clone(), System.Windows.Media.Brushes.Green.Clone(),
System.Windows.Media.Brushes.IndianRed.Clone() }; System.Windows.Media.Brushes.IndianRed.Clone() };
foreach (var brush in brushes) foreach (var brush in brushes)
brush.Opacity = 0.75; brush.Opacity = 0.75;
@@ -131,6 +181,13 @@ namespace friction
Values = Points[2], Values = Points[2],
Fill = brushes[2], Fill = brushes[2],
}, },
new LineSeries
{
Title = "Trend",
Values = TrendPoints,
PointGeometry = DefaultGeometries.None,
StrokeThickness = 4,
},
}; };
@@ -146,6 +203,7 @@ namespace friction
ChartValues<ScatterPoint>[] Points = { ChartValues<ScatterPoint>[] Points = {
new ChartValues<ScatterPoint>(), new ChartValues<ScatterPoint>(),
new ChartValues<ScatterPoint>() }; new ChartValues<ScatterPoint>() };
var Values = new List<TrendLine.POINT>();
foreach (var pnt in Chart) foreach (var pnt in Chart)
{ {
@@ -153,8 +211,17 @@ namespace friction
Points[0].Add(new ScatterPoint(pnt.TEMPERATURE, pnt.RPN, 2)); Points[0].Add(new ScatterPoint(pnt.TEMPERATURE, pnt.RPN, 2));
else else
Points[1].Add(new ScatterPoint(pnt.TEMPERATURE, pnt.RPN, 2)); Points[1].Add(new ScatterPoint(pnt.TEMPERATURE, pnt.RPN, 2));
Values.Add(new TrendLine.POINT { X = pnt.TEMPERATURE, Y = pnt.RPN });
} }
Values.Sort((a, b) => (a.X == b.X) ? 0 : (a.X<b.X) ? -1 : 1);
TrendLine trendline = new TrendLine(Values);
ChartValues<ScatterPoint> TrendPoints = new ChartValues<ScatterPoint>();
TrendPoints.Add(new ScatterPoint(Values[0].X, trendline.GetY(Values[0].X)));
TrendPoints.Add(new ScatterPoint(Values[Values.Count / 2].X, trendline.GetY(Values[Values.Count / 2].X)));
TrendPoints.Add(new ScatterPoint(Values[Values.Count - 1].X, trendline.GetY(Values[Values.Count - 1].X)));
trendChart.Series = new SeriesCollection trendChart.Series = new SeriesCollection
{ {
new ScatterSeries new ScatterSeries
@@ -169,6 +236,13 @@ namespace friction
Values = Points[1], Values = Points[1],
Foreground = System.Windows.Media.Brushes.DarkBlue, Foreground = System.Windows.Media.Brushes.DarkBlue,
}, },
new LineSeries
{
Title = "Trend",
Values = TrendPoints,
PointGeometry = DefaultGeometries.None,
StrokeThickness = 4,
},
}; };
dMin = Chart.Min(r => r.TEMPERATURE - 1); dMin = Chart.Min(r => r.TEMPERATURE - 1);

99
TrendLine.cs Normal file
View File

@@ -0,0 +1,99 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace friction
{
public class TrendLine
{
public struct POINT
{
public float X;
public float Y;
}
private readonly List<POINT> AxisValues;
private int count;
private float xAxisValuesSum;
private float xxSum;
private float xySum;
private float yAxisValuesSum;
//public TrendLine(IList<float> xAxisValues, IList<float> yAxisValues)
//{
// this.xAxisValues = xAxisValues;
// this.yAxisValues = yAxisValues;
// this.Initialize();
//}
public TrendLine(List<POINT> points)
{
AxisValues = points;
AxisValues.Sort((POINT a, POINT b) => (a.X == b.X) ? 0 : (a.X < b.X) ? -1 : 1);
this.Initialize();
}
public float Slope { get; private set; }
public float Intercept { get; private set; }
public float Start { get; private set; }
public float End { get; private set; }
private void Initialize()
{
this.count = this.AxisValues.Count;
this.yAxisValuesSum = this.AxisValues.Sum(e => e.Y);
this.xAxisValuesSum = this.AxisValues.Sum(e => e.X);
this.xxSum = 0;
this.xySum = 0;
for (int i = 0; i < this.count; i++)
{
this.xySum += (this.AxisValues[i].X * this.AxisValues[i].Y);
this.xxSum += (this.AxisValues[i].X * this.AxisValues[i].X);
}
this.Slope = this.CalculateSlope();
this.Intercept = this.CalculateIntercept();
this.Start = this.CalculateStart();
this.End = this.CalculateEnd();
}
private float CalculateSlope()
{
try
{
return ((this.count * this.xySum) - (this.xAxisValuesSum * this.yAxisValuesSum)) / ((this.count * this.xxSum) - (this.xAxisValuesSum * this.xAxisValuesSum));
}
catch (DivideByZeroException)
{
return 0;
}
}
private float CalculateIntercept()
{
return (this.yAxisValuesSum - (this.Slope * this.xAxisValuesSum)) / this.count;
}
private float CalculateStart()
{
return (this.Slope * this.AxisValues.First().X) + this.Intercept;
}
private float CalculateEnd()
{
return (this.Slope * this.AxisValues.Last().X) + this.Intercept;
}
public float GetY(float fX)
{
return (this.Slope * fX) + this.Intercept;
}
}
}

View File

@@ -110,6 +110,7 @@
<DependentUpon>PanelMaterial.cs</DependentUpon> <DependentUpon>PanelMaterial.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="Theme.cs" /> <Compile Include="Theme.cs" />
<Compile Include="TrendLine.cs" />
<EmbeddedResource Include="MainForm.resx"> <EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon> <DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>