Neuerstellung

- Quelle: https://github.com/oxyplot/oxyplot
This commit is contained in:
2023-09-02 09:24:59 +02:00
commit 9520c1fa4a
810 changed files with 117869 additions and 0 deletions

View File

@@ -0,0 +1,165 @@
namespace ExampleLibrary
{
using System;
using System.Collections.Generic;
using System.Linq;
using OxyPlot;
using OxyPlot.Axes;
using OxyPlot.Series;
[Examples("VectorSeries"), Tags("Series")]
public static class VectorSeriesExamples
{
private static readonly Func<double, double, double> dpeaksdx = (x, y) =>
-10 * ((1 / 5 - 3 * Math.Pow(x, 2)) * Math.Exp(-Math.Pow(x, 2) - Math.Pow(y, 2)) - 2 * x * (x / 5 - Math.Pow(x, 3) - Math.Pow(y, 5)) * Math.Exp(-Math.Pow(x, 2) - Math.Pow(y, 2))) + 0.6666666666666666 * (1 + x) * Math.Exp(-Math.Pow(1 + x, 2) - Math.Pow(y, 2)) + 3 * (-2 * (1 - x) * Math.Exp(-Math.Pow(x, 2) - Math.Pow(1 + y, 2)) - 2 * x * Math.Pow(1 - x, 2) * Math.Exp(-Math.Pow(x, 2) - Math.Pow(1 + y, 2)));
private static readonly Func<double, double, double> dpeaksdy = (x, y) =>
-10 * (-5 * Math.Pow(y, 4) * Math.Exp(-Math.Pow(x, 2) - Math.Pow(y, 2)) - 2 * y * (x / 5 - Math.Pow(x, 3) - Math.Pow(y, 5)) * Math.Exp(-Math.Pow(x, 2) - Math.Pow(y, 2))) + 0.6666666666666666 * y * Math.Exp(-Math.Pow(1 + x, 2) - Math.Pow(y, 2)) - 6 * Math.Pow(1 - x, 2) * (1 + y) * Math.Exp(-Math.Pow(x, 2) - Math.Pow(1 + y, 2));
[Example("VectorSeries")]
public static PlotModel FromItems()
{
var model = GetModel(true, out _);
return model;
}
[Example("VectorSeries (Veeness = 2)")]
public static PlotModel FromItemsVeeness()
{
var model = GetModel(true, out var series);
series.ArrowVeeness = 2;
return model;
}
[Example("VectorSeries (Vector Origin and Label position)")]
public static PlotModel FromItemsVectorOriginAndLabelPosition()
{
var model = GetModel(true, out var series);
series.ArrowLabelPosition = 0.25;
series.ArrowStartPosition = 0.5;
return model;
}
[Example("VectorSeries (without ColorAxis)")]
public static PlotModel FromItemsWithoutColorAxis()
{
var model = GetModel(false, out _);
return model;
}
[Example("Vector Field")]
[DocumentationExample("Series/VectorSeries")]
public static PlotModel VectorField()
{
var model = new PlotModel { Title = "Peaks (Gradient)" };
var vs = new VectorSeries();
var columnCoordinates = ArrayBuilder.CreateVector(-3, 3, 0.25);
var rowCoordinates = ArrayBuilder.CreateVector(-3.1, 3.1, 0.25);
vs.ArrowVeeness = 1;
vs.ArrowStartPosition = 0.5;
vs.ItemsSource = columnCoordinates.SelectMany(x => rowCoordinates.Select(y => new VectorItem(new DataPoint(x, y), new DataVector(dpeaksdx(x, y) / 40, dpeaksdy(x, y) / 40), double.NaN))).ToList();
model.Series.Add(vs);
return model;
}
private static PlotModel GetModel(bool includeColorAxis, out VectorSeries series)
{
const int NumberOfItems = 100;
var model = new PlotModel { Title = "VectorSeries (Veeness = 2)" };
var rand = new Random(1);
var w = 100.0;
var h = 100.0;
var max = 10.0;
if (includeColorAxis)
{
model.Axes.Add(new LinearColorAxis
{
Position = AxisPosition.Right,
Palette = new OxyPalette(OxyPalettes.Cool(10).Colors.Select(c => OxyColor.FromAColor(100, c))),
Minimum = 0.0,
Maximum = max,
});
}
model.Axes.Add(new LinearAxis()
{
Position = AxisPosition.Bottom,
Minimum = -max,
Maximum = w + max,
});
model.Axes.Add(new LinearAxis()
{
Position = AxisPosition.Left,
Minimum = -max,
Maximum = h + max,
});
series = new VectorSeries() { LabelFontSize = 12 };
for (int i = NumberOfItems - 1; i >= 0; i--)
{
var ang = rand.NextDouble() * Math.PI * 2.0;
var mag = rand.NextDouble() * max;
var origin = new DataPoint(rand.NextDouble() * w, rand.NextDouble() * h);
var direction = new DataVector(Math.Cos(ang) * mag, Math.Sin(ang) * mag);
series.Items.Add(new VectorItem(origin, direction, mag));
}
model.Series.Add(series);
return model;
}
[Example("VectorSeries on Log Axis")]
[DocumentationExample("Series/VectorSeries")]
public static PlotModel LogarithmicYAxis()
{
const int NumberOfItems = 100;
var model = new PlotModel { Title = "VectorSeries" };
var rand = new Random(1);
var w = 100.0;
var h = 100.0;
var max = 50.0;
model.Axes.Add(new LinearColorAxis
{
Position = AxisPosition.Right,
Palette = OxyPalettes.Cool(10),
Minimum = 0.0,
Maximum = max,
});
model.Axes.Add(new LinearAxis()
{
Position = AxisPosition.Bottom,
Minimum = -max,
Maximum = w + max,
});
model.Axes.Add(new LogarithmicAxis()
{
Position = AxisPosition.Left,
Minimum = 1,
Maximum = h + max,
});
var s = new VectorSeries() { LabelFontSize = 12 };
for (int i = NumberOfItems - 1; i >= 0; i--)
{
var ang = rand.NextDouble() * Math.PI * 2.0;
var mag = rand.NextDouble() * max;
var origin = new DataPoint(rand.NextDouble() * w, rand.NextDouble() * h + 1);
var direction = new DataVector(Math.Cos(ang) * mag, Math.Sin(ang) * mag);
s.Items.Add(new VectorItem(origin, direction, mag));
}
model.Series.Add(s);
return model;
}
}
}