2396 lines
148 KiB
C#
2396 lines
148 KiB
C#
// --------------------------------------------------------------------------------------------------------------------
|
|
// <copyright file="MiscExamples.cs" company="OxyPlot">
|
|
// Copyright (c) 2014 OxyPlot contributors
|
|
// </copyright>
|
|
// <summary>
|
|
// Appends the specified target.
|
|
// </summary>
|
|
// --------------------------------------------------------------------------------------------------------------------
|
|
|
|
namespace ExampleLibrary
|
|
{
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.IO;
|
|
using System.Reflection;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Xml.Serialization;
|
|
|
|
using OxyPlot;
|
|
using OxyPlot.Annotations;
|
|
using OxyPlot.Axes;
|
|
using OxyPlot.Series;
|
|
using OxyPlot.Legends;
|
|
using System.Linq;
|
|
|
|
[Examples("Misc")]
|
|
public static class MiscExamples
|
|
{
|
|
[Example("Numeric ODE solvers (y'=y)")]
|
|
public static PlotModel NumericOdeSolvers1()
|
|
{
|
|
return NumericOdeSolvers("Numeric ODE solvers", "y'=y, y(0)=1", 0, 1, Math.Exp, (t, y) => y);
|
|
}
|
|
|
|
[Example("Numeric ODE solvers (y'=x)")]
|
|
public static PlotModel NumericOdeSolvers2()
|
|
{
|
|
return NumericOdeSolvers("Numeric ODE solvers", "y'=x, y(0)=0", 0, 0, t => 0.5 * t * t, (t, y) => t);
|
|
}
|
|
|
|
[Example("Numeric ODE solvers (y'=cos(x))")]
|
|
public static PlotModel NumericOdeSolvers3()
|
|
{
|
|
return NumericOdeSolvers("Numeric ODE solvers", "y'=cos(x), y(0)=0", 0, 0, Math.Sin, (t, y) => Math.Cos(t));
|
|
}
|
|
|
|
public static PlotModel NumericOdeSolvers(
|
|
string title,
|
|
string subtitle,
|
|
double t0,
|
|
double y0,
|
|
Func<double, double> exact,
|
|
Func<double, double, double> f)
|
|
{
|
|
var model = new PlotModel
|
|
{
|
|
Title = title,
|
|
Subtitle = subtitle,
|
|
};
|
|
|
|
var l = new Legend
|
|
{
|
|
LegendPosition = LegendPosition.BottomCenter,
|
|
LegendPlacement = LegendPlacement.Outside,
|
|
LegendOrientation = LegendOrientation.Horizontal
|
|
};
|
|
|
|
model.Legends.Add(l);
|
|
model.Series.Add(new FunctionSeries(exact, 0, 4, 100) { Title = "Exact solution", StrokeThickness = 5 });
|
|
var eulerSeries = new LineSeries
|
|
{
|
|
Title = "Euler, h=0.25",
|
|
MarkerType = MarkerType.Circle,
|
|
MarkerFill = OxyColors.Black,
|
|
};
|
|
eulerSeries.Points.AddRange(Euler(f, t0, y0, 4, 0.25));
|
|
model.Series.Add(eulerSeries);
|
|
|
|
//model.Series.Add(new LineSeries("Euler, h=1")
|
|
// {
|
|
// MarkerType = MarkerType.Circle,
|
|
// MarkerFill = OxyColors.Black,
|
|
// Points = Euler(f, t0, y0, 4, 1)
|
|
// });
|
|
var heunSeries = new LineSeries
|
|
{
|
|
Title = "Heun, h=0.25",
|
|
MarkerType = MarkerType.Circle,
|
|
MarkerFill = OxyColors.Black,
|
|
};
|
|
heunSeries.Points.AddRange(Heun(f, t0, y0, 4, 0.25));
|
|
model.Series.Add(heunSeries);
|
|
|
|
var midpointSeries = new LineSeries
|
|
{
|
|
Title = "Midpoint, h=0.25",
|
|
MarkerType = MarkerType.Circle,
|
|
MarkerFill = OxyColors.Black,
|
|
};
|
|
midpointSeries.Points.AddRange(Midpoint(f, t0, y0, 4, 0.25));
|
|
model.Series.Add(midpointSeries);
|
|
|
|
var rkSeries = new LineSeries
|
|
{
|
|
Title = "RK4, h=0.25",
|
|
MarkerType = MarkerType.Circle,
|
|
MarkerFill = OxyColors.Black,
|
|
};
|
|
rkSeries.Points.AddRange(RungeKutta4(f, t0, y0, 4, 0.25));
|
|
model.Series.Add(rkSeries);
|
|
|
|
//model.Series.Add(new LineSeries("RK4, h=1")
|
|
//{
|
|
// MarkerType = MarkerType.Circle,
|
|
// MarkerFill = OxyColors.Black,
|
|
// Points = RungeKutta4(f, t0, y0, 4, 1)
|
|
//});
|
|
|
|
model.Axes.Add(new LinearAxis { Position = AxisPosition.Left });
|
|
return model;
|
|
}
|
|
|
|
private static List<DataPoint> Euler(
|
|
Func<double, double, double> f, double t0, double y0, double t1, double h)
|
|
{
|
|
var points = new List<DataPoint>();
|
|
double y = y0;
|
|
for (double t = t0; t < t1 + h / 2; t += h)
|
|
{
|
|
points.Add(new DataPoint(t, y));
|
|
y += h * f(t, y);
|
|
}
|
|
|
|
return points;
|
|
}
|
|
|
|
private static IList<DataPoint> Heun(Func<double, double, double> f, double t0, double y0, double t1, double h)
|
|
{
|
|
var points = new List<DataPoint>();
|
|
double y = y0;
|
|
for (double t = t0; t < t1 + h / 2; t += h)
|
|
{
|
|
points.Add(new DataPoint(t, y));
|
|
double ytilde = y + h * f(t, y);
|
|
y = y + h / 2 * (f(t, y) + f(t + h, ytilde));
|
|
}
|
|
|
|
return points;
|
|
}
|
|
|
|
private static List<DataPoint> Midpoint(
|
|
Func<double, double, double> f, double t0, double y0, double t1, double h)
|
|
{
|
|
var points = new List<DataPoint>();
|
|
double y = y0;
|
|
for (double t = t0; t < t1 + h / 2; t += h)
|
|
{
|
|
points.Add(new DataPoint(t, y));
|
|
y += h * f(t + h / 2, y + h / 2 * f(t, y));
|
|
}
|
|
|
|
return points;
|
|
}
|
|
|
|
private static List<DataPoint> RungeKutta4(
|
|
Func<double, double, double> f, double t0, double y0, double t1, double h)
|
|
{
|
|
var points = new List<DataPoint>();
|
|
double y = y0;
|
|
for (double t = t0; t < t1 + h / 2; t += h)
|
|
{
|
|
points.Add(new DataPoint(t, y));
|
|
double k1 = h * f(t, y);
|
|
double k2 = h * f(t + h / 2, y + k1 / 2);
|
|
double k3 = h * f(t + h / 2, y + k2 / 2);
|
|
double k4 = h * f(t + h, y + k3);
|
|
y += (k1 + 2 * k2 + 2 * k3 + k4) / 6;
|
|
}
|
|
|
|
return points;
|
|
}
|
|
|
|
[Example("MatrixSeries (chemical process simulation problem)")]
|
|
public static PlotModel MatrixSeriesWest0479()
|
|
{
|
|
// http://www.cise.ufl.edu/research/sparse/matrices/HB/west0479
|
|
var model = new PlotModel();
|
|
|
|
double[,] matrix = null;
|
|
|
|
|
|
|
|
using (var reader = new StreamReader(typeof(MiscExamples).GetTypeInfo().Assembly.GetManifestResourceStream("ExampleLibrary.Resources.west0479.mtx")))
|
|
{
|
|
while (!reader.EndOfStream)
|
|
{
|
|
var line = reader.ReadLine();
|
|
if (line.StartsWith("%"))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var v = line.Split(' ');
|
|
if (matrix == null)
|
|
{
|
|
int m = int.Parse(v[0]);
|
|
int n = int.Parse(v[1]);
|
|
matrix = new double[m, n];
|
|
continue;
|
|
}
|
|
|
|
int i = int.Parse(v[0]) - 1;
|
|
int j = int.Parse(v[1]) - 1;
|
|
matrix[i, j] = double.Parse(v[2], CultureInfo.InvariantCulture);
|
|
}
|
|
}
|
|
|
|
// Reverse the vertical axis
|
|
model.Axes.Add(new LinearAxis { Position = AxisPosition.Left, StartPosition = 1, EndPosition = 0 });
|
|
model.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom });
|
|
model.Series.Add(new MatrixSeries { Matrix = matrix, ShowDiagonal = true });
|
|
|
|
return model;
|
|
}
|
|
|
|
[Example("Train schedule")]
|
|
public static PlotModel TrainSchedule()
|
|
{
|
|
//// http://www.edwardtufte.com/tufte/books_vdqi
|
|
//// http://marlenacompton.com/?p=103
|
|
//// http://mbostock.github.com/protovis/ex/caltrain.html
|
|
//// http://en.wikipedia.org/wiki/%C3%89tienne-Jules_Marey
|
|
//// http://mbostock.github.com/protovis/ex/marey-train-schedule.jpg
|
|
//// http://c82.net/posts.php?id=66
|
|
|
|
var model = new PlotModel
|
|
{
|
|
Title = "Train schedule",
|
|
Subtitle = "Bergensbanen (Oslo-Bergen, Norway)",
|
|
IsLegendVisible = false,
|
|
PlotAreaBorderColor = OxyColors.LightGray,
|
|
};
|
|
|
|
var distanceAxis = new LinearAxis
|
|
{
|
|
Position = AxisPosition.Left,
|
|
Minimum = -20,
|
|
Maximum = 540,
|
|
Title = "Distance from Oslo S",
|
|
IsAxisVisible = true,
|
|
StringFormat = "0",
|
|
};
|
|
|
|
model.Axes.Add(distanceAxis);
|
|
|
|
var stationAxis = new CustomAxis
|
|
{
|
|
MajorGridlineStyle = LineStyle.Solid,
|
|
MajorGridlineColor = OxyColors.LightGray,
|
|
Minimum = distanceAxis.Minimum,
|
|
Maximum = distanceAxis.Maximum,
|
|
Position = AxisPosition.Right,
|
|
IsPanEnabled = false,
|
|
IsZoomEnabled = false,
|
|
MajorTickSize = 0,
|
|
};
|
|
|
|
distanceAxis.AxisChanged += (sender, e) =>
|
|
{
|
|
stationAxis.Minimum = distanceAxis.ActualMinimum;
|
|
stationAxis.Maximum = distanceAxis.ActualMaximum;
|
|
};
|
|
|
|
model.Axes.Add(stationAxis);
|
|
|
|
model.Axes.Add(
|
|
new TimeSpanAxis
|
|
{
|
|
Position = AxisPosition.Bottom,
|
|
Minimum = 0,
|
|
Maximum = TimeSpanAxis.ToDouble(TimeSpan.FromHours(24)),
|
|
StringFormat = "hh",
|
|
Title = "Time",
|
|
MajorStep = TimeSpanAxis.ToDouble(TimeSpan.FromHours(1)),
|
|
MinorStep = TimeSpanAxis.ToDouble(TimeSpan.FromMinutes(10)),
|
|
TickStyle = TickStyle.None,
|
|
MajorGridlineStyle = LineStyle.Solid,
|
|
MajorGridlineColor = OxyColors.LightGray,
|
|
MinorGridlineStyle = LineStyle.Solid,
|
|
MinorGridlineColor = OxyColor.FromArgb(255, 240, 240, 240)
|
|
});
|
|
|
|
// Read the train schedule from a .csv resource
|
|
using (var reader = new StreamReader(GetResourceStream("Bergensbanen.csv")))
|
|
{
|
|
string header = reader.ReadLine();
|
|
var headerFields = header.Split(';');
|
|
int lines = headerFields.Length - 3;
|
|
var stations = new LineSeries()
|
|
{
|
|
StrokeThickness = 0,
|
|
MarkerType = MarkerType.Circle,
|
|
MarkerFill = OxyColor.FromAColor(200, OxyColors.Black),
|
|
MarkerSize = 4,
|
|
};
|
|
|
|
// Add the line series for each train line
|
|
var series = new LineSeries[lines];
|
|
for (int i = 0; i < series.Length; i++)
|
|
{
|
|
series[i] = new LineSeries
|
|
{
|
|
Title = headerFields[3 + i],
|
|
Color =
|
|
OxyColor.FromAColor(
|
|
180, OxyColors.Black),
|
|
StrokeThickness = 2,
|
|
TrackerFormatString =
|
|
"Train {0}\nTime: {2}\nDistance from Oslo S: {4:0.0} km",
|
|
};
|
|
model.Series.Add(series[i]);
|
|
}
|
|
|
|
// Parse the train schedule
|
|
while (!reader.EndOfStream)
|
|
{
|
|
var line = reader.ReadLine();
|
|
|
|
// skip comments
|
|
if (line == null || line.StartsWith("//"))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var fields = line.Split(';');
|
|
double x = double.Parse(fields[1], CultureInfo.InvariantCulture);
|
|
if (!string.IsNullOrEmpty(fields[0]))
|
|
{
|
|
stationAxis.MajorTicks.Add(x);
|
|
stationAxis.Labels.Add(fields[0]);
|
|
}
|
|
|
|
for (int i = 0; i < series.Length; i++)
|
|
{
|
|
if (string.IsNullOrEmpty(fields[i + 3]))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
// Convert time from hhmm to a time span
|
|
int hhmm = int.Parse(fields[i + 3]);
|
|
var span = new TimeSpan(0, hhmm / 100, (hhmm % 100), 0);
|
|
double t = TimeSpanAxis.ToDouble(span);
|
|
|
|
// Add the point to the line
|
|
series[i].Points.Add(new DataPoint(t, x));
|
|
|
|
// Add the point for the station
|
|
stations.Points.Add(new DataPoint(t, x));
|
|
}
|
|
}
|
|
|
|
// add points and NaN (to make a line break) when passing midnight
|
|
double tmidnight = TimeSpanAxis.ToDouble(TimeSpan.FromHours(24));
|
|
foreach (LineSeries s in model.Series)
|
|
{
|
|
for (int i = 0; i + 1 < s.Points.Count; i++)
|
|
{
|
|
if (Math.Abs(s.Points[i].X - s.Points[i + 1].X) > tmidnight / 2)
|
|
{
|
|
double x0 = s.Points[i].X;
|
|
if (x0 > tmidnight / 2)
|
|
{
|
|
x0 -= tmidnight;
|
|
}
|
|
|
|
double x1 = s.Points[i + 1].X;
|
|
if (x1 > tmidnight / 2)
|
|
{
|
|
x1 -= tmidnight;
|
|
}
|
|
|
|
double y = s.Points[i].Y + (s.Points[i + 1].Y - s.Points[i].Y) / (x1 - x0) * (0 - x0);
|
|
s.Points.Insert(i + 1, new DataPoint(x0 < x1 ? 0 : tmidnight, y));
|
|
s.Points.Insert(i + 1, new DataPoint(double.NaN, y));
|
|
s.Points.Insert(i + 1, new DataPoint(x0 < x1 ? tmidnight : 0, y));
|
|
i += 3;
|
|
}
|
|
}
|
|
}
|
|
|
|
model.Series.Add(stations);
|
|
}
|
|
|
|
return model;
|
|
}
|
|
|
|
[Example("La Linea (AreaSeries)")]
|
|
public static PlotModel LaLineaAreaSeries()
|
|
{
|
|
// http://en.wikipedia.org/wiki/La_Linea_(TV_series)
|
|
var model = new PlotModel
|
|
{
|
|
Title = "La Linea",
|
|
PlotType = PlotType.Cartesian,
|
|
Background = OxyColor.FromRgb(84, 98, 207)
|
|
};
|
|
model.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Minimum = -500, Maximum = 1000 });
|
|
var series1 = new AreaSeries { Fill = OxyColors.White, StrokeThickness = 0 };
|
|
series1.Points.Append(GetLineaPoints());
|
|
model.Series.Add(series1);
|
|
return model;
|
|
}
|
|
|
|
[Example("La Linea (LineSeries)")]
|
|
public static PlotModel LaLinea()
|
|
{
|
|
// http://en.wikipedia.org/wiki/La_Linea_(TV_series)
|
|
var model = new PlotModel
|
|
{
|
|
Title = "La Linea",
|
|
PlotType = PlotType.Cartesian,
|
|
Background = OxyColor.FromRgb(84, 98, 207)
|
|
};
|
|
model.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Minimum = -500, Maximum = 1000 });
|
|
var series1 = new LineSeries { Color = OxyColors.White, StrokeThickness = 1.5 };
|
|
series1.Points.Append(GetLineaPoints());
|
|
model.Series.Add(series1);
|
|
return model;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Appends the specified target.
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <param name="target">The target.</param>
|
|
/// <param name="source">The source.</param>
|
|
public static void Append<T>(this IList<T> target, IEnumerable<T> source)
|
|
{
|
|
foreach (var item in source)
|
|
{
|
|
target.Add(item);
|
|
}
|
|
}
|
|
|
|
private static IEnumerable<DataPoint> GetLineaPoints()
|
|
{
|
|
var points = new List<DataPoint>();
|
|
|
|
// The original image was vectorized by http://www.autotracer.org/
|
|
// Then inkscape was used to convert from svg to xaml http://inkscape.org/
|
|
// The xaml geometry was imported by Geometry.Parse and converted to a polyline
|
|
// by Geometry.GetFlattenedPathGeometry();
|
|
// The resulting points were output to the following code:
|
|
points.Add(new DataPoint(589.3649979, 16.10595703));
|
|
points.Add(new DataPoint(437.9979935, 16.10595703));
|
|
points.Add(new DataPoint(400.4249954, 16.10595703));
|
|
points.Add(new DataPoint(399.1255264, 16.05047607));
|
|
points.Add(new DataPoint(397.463356, 15.92333984));
|
|
points.Add(new DataPoint(393.5852432, 15.69073486));
|
|
points.Add(new DataPoint(389.8589859, 15.88067627));
|
|
points.Add(new DataPoint(388.3866653, 16.28186035));
|
|
points.Add(new DataPoint(387.3529739, 16.96594238));
|
|
points.Add(new DataPoint(386.8373489, 18.53930664));
|
|
points.Add(new DataPoint(387.2163773, 20.51794434));
|
|
points.Add(new DataPoint(387.9814529, 22.51843262));
|
|
points.Add(new DataPoint(388.6240005, 24.15698242));
|
|
points.Add(new DataPoint(395.958992, 45.09094238));
|
|
points.Add(new DataPoint(399.2686234, 54.89562988));
|
|
points.Add(new DataPoint(402.1330338, 64.90338135));
|
|
points.Add(new DataPoint(404.5822525, 75.06884766));
|
|
points.Add(new DataPoint(406.6462479, 85.34680176));
|
|
points.Add(new DataPoint(409.7385635, 106.0593262));
|
|
points.Add(new DataPoint(411.6500015, 126.6789551));
|
|
points.Add(new DataPoint(412.0961685, 137.0930786));
|
|
points.Add(new DataPoint(412.0253677, 147.4713135));
|
|
points.Add(new DataPoint(411.4655228, 157.8103638));
|
|
points.Add(new DataPoint(410.4446182, 168.1069336));
|
|
points.Add(new DataPoint(408.9906387, 178.3577881));
|
|
points.Add(new DataPoint(407.1315689, 188.5595703));
|
|
points.Add(new DataPoint(404.8953629, 198.7091064));
|
|
points.Add(new DataPoint(402.3099747, 208.8029785));
|
|
points.Add(new DataPoint(392.9860001, 237.2509766));
|
|
points.Add(new DataPoint(392.1175613, 240.0527954));
|
|
points.Add(new DataPoint(391.2060013, 243.0959473));
|
|
points.Add(new DataPoint(390.5509415, 246.1691284));
|
|
points.Add(new DataPoint(390.4520035, 249.0609741));
|
|
points.Add(new DataPoint(391.406044, 252.6694336));
|
|
points.Add(new DataPoint(393.1980057, 256.0982056));
|
|
points.Add(new DataPoint(395.3566971, 259.3631287));
|
|
points.Add(new DataPoint(397.4109879, 262.47995));
|
|
points.Add(new DataPoint(411.7649918, 287.7079468));
|
|
points.Add(new DataPoint(426.5997696, 312.9102173));
|
|
points.Add(new DataPoint(441.8913651, 337.8200684));
|
|
points.Add(new DataPoint(457.3402786, 362.6333923));
|
|
points.Add(new DataPoint(472.6469803, 387.5459595));
|
|
points.Add(new DataPoint(478.0007401, 395.7557983));
|
|
points.Add(new DataPoint(483.6958694, 403.8400879));
|
|
points.Add(new DataPoint(489.2894974, 411.9628296));
|
|
points.Add(new DataPoint(494.3389969, 420.2879639));
|
|
points.Add(new DataPoint(494.9800491, 421.8480225));
|
|
points.Add(new DataPoint(495.4455032, 423.6903687));
|
|
points.Add(new DataPoint(496.1577225, 427.7724609));
|
|
points.Add(new DataPoint(497.0915604, 431.6355591));
|
|
points.Add(new DataPoint(497.8341141, 433.2041321));
|
|
points.Add(new DataPoint(498.8629837, 434.3809509));
|
|
points.Add(new DataPoint(500.0935135, 434.9877625));
|
|
points.Add(new DataPoint(501.7391434, 435.3059082));
|
|
points.Add(new DataPoint(505.7623367, 435.3148193));
|
|
points.Add(new DataPoint(509.9061356, 434.8848267));
|
|
points.Add(new DataPoint(511.7024612, 434.6542969));
|
|
points.Add(new DataPoint(513.1439896, 434.4929504));
|
|
points.Add(new DataPoint(520.0768509, 434.1251831));
|
|
points.Add(new DataPoint(527.3961258, 434.1952209));
|
|
points.Add(new DataPoint(534.6892776, 434.728363));
|
|
points.Add(new DataPoint(541.544014, 435.7499695));
|
|
points.Add(new DataPoint(544.2357864, 436.3025513));
|
|
points.Add(new DataPoint(547.021492, 437.0792236));
|
|
points.Add(new DataPoint(549.6099319, 438.2590027));
|
|
points.Add(new DataPoint(551.7099686, 440.0209656));
|
|
points.Add(new DataPoint(552.7028275, 441.4446106));
|
|
points.Add(new DataPoint(553.2691116, 442.791626));
|
|
points.Add(new DataPoint(553.4498978, 444.0619202));
|
|
points.Add(new DataPoint(553.2864456, 445.2554626));
|
|
points.Add(new DataPoint(552.0910721, 447.4119873));
|
|
points.Add(new DataPoint(550.0122147, 449.2607117));
|
|
points.Add(new DataPoint(547.3790359, 450.8010864));
|
|
points.Add(new DataPoint(544.5206985, 452.0325928));
|
|
points.Add(new DataPoint(541.766304, 452.9547119));
|
|
points.Add(new DataPoint(539.445015, 453.5669556));
|
|
points.Add(new DataPoint(539.445015, 454.6409607));
|
|
points.Add(new DataPoint(542.6554031, 455.4246521));
|
|
points.Add(new DataPoint(546.0063553, 455.8735962));
|
|
points.Add(new DataPoint(549.2799149, 456.4869385));
|
|
points.Add(new DataPoint(552.2580032, 457.7639465));
|
|
points.Add(new DataPoint(554.3335648, 459.5966797));
|
|
points.Add(new DataPoint(555.6600418, 461.8208313));
|
|
points.Add(new DataPoint(556.278389, 464.282959));
|
|
points.Add(new DataPoint(556.2294998, 466.8295898));
|
|
points.Add(new DataPoint(555.55439, 469.307251));
|
|
points.Add(new DataPoint(554.2939529, 471.5625));
|
|
points.Add(new DataPoint(552.4892044, 473.4418945));
|
|
points.Add(new DataPoint(550.1809769, 474.7919617));
|
|
points.Add(new DataPoint(547.1414261, 475.8059387));
|
|
points.Add(new DataPoint(543.8482132, 476.5288391));
|
|
points.Add(new DataPoint(537.2979813, 477.0559692));
|
|
points.Add(new DataPoint(535.5239944, 476.8666077));
|
|
points.Add(new DataPoint(533.5114822, 476.5535889));
|
|
points.Add(new DataPoint(531.5334549, 476.4162598));
|
|
points.Add(new DataPoint(529.8629837, 476.7539673));
|
|
points.Add(new DataPoint(529.0471268, 477.3421631));
|
|
points.Add(new DataPoint(528.5394363, 478.1289673));
|
|
points.Add(new DataPoint(528.1448441, 480.0927124));
|
|
points.Add(new DataPoint(528.071846, 482.2338257));
|
|
points.Add(new DataPoint(527.7129593, 484.1409607));
|
|
points.Add(new DataPoint(526.901741, 485.4877014));
|
|
points.Add(new DataPoint(525.8139114, 486.4950867));
|
|
points.Add(new DataPoint(523.0528641, 487.6643372));
|
|
points.Add(new DataPoint(519.9188919, 487.9933777));
|
|
points.Add(new DataPoint(516.9010086, 487.8269653));
|
|
points.Add(new DataPoint(511.7325516, 486.9451599));
|
|
points.Add(new DataPoint(506.4563065, 485.4539185));
|
|
points.Add(new DataPoint(501.155159, 483.4500427));
|
|
points.Add(new DataPoint(495.912117, 481.0302124));
|
|
points.Add(new DataPoint(485.9321365, 475.3295898));
|
|
points.Add(new DataPoint(481.3610916, 472.2423096));
|
|
points.Add(new DataPoint(477.1800003, 469.125946));
|
|
points.Add(new DataPoint(465.3709793, 459.3179626));
|
|
points.Add(new DataPoint(464.3509598, 458.3116455));
|
|
points.Add(new DataPoint(463.1867142, 457.1624451));
|
|
points.Add(new DataPoint(461.9141312, 456.2180176));
|
|
points.Add(new DataPoint(460.5689774, 455.8259583));
|
|
points.Add(new DataPoint(459.6923904, 456.0762939));
|
|
points.Add(new DataPoint(458.8656693, 456.7503662));
|
|
points.Add(new DataPoint(457.3631058, 458.907959));
|
|
points.Add(new DataPoint(456.063179, 461.3753052));
|
|
points.Add(new DataPoint(455.4898758, 462.436554));
|
|
points.Add(new DataPoint(454.9679642, 463.2289734));
|
|
points.Add(new DataPoint(453.0795364, 465.3183289));
|
|
points.Add(new DataPoint(450.8528519, 467.2734985));
|
|
points.Add(new DataPoint(448.3575516, 468.9848328));
|
|
points.Add(new DataPoint(445.6630936, 470.3425903));
|
|
points.Add(new DataPoint(442.83918, 471.2370605));
|
|
points.Add(new DataPoint(439.9552689, 471.5585938));
|
|
points.Add(new DataPoint(437.0810318, 471.1974487));
|
|
points.Add(new DataPoint(434.2859879, 470.0439453));
|
|
points.Add(new DataPoint(432.4744034, 468.6621399));
|
|
points.Add(new DataPoint(431.3244705, 467.0726013));
|
|
points.Add(new DataPoint(430.7551956, 465.3302612));
|
|
points.Add(new DataPoint(430.6856155, 463.4900818));
|
|
points.Add(new DataPoint(431.0347672, 461.6070251));
|
|
points.Add(new DataPoint(431.7216873, 459.7360229));
|
|
points.Add(new DataPoint(433.7849808, 456.2499695));
|
|
points.Add(new DataPoint(438.1093216, 450.118988));
|
|
points.Add(new DataPoint(441.4749832, 444.3893433));
|
|
points.Add(new DataPoint(444.0351639, 438.28302));
|
|
points.Add(new DataPoint(445.0610428, 434.845459));
|
|
points.Add(new DataPoint(445.9430008, 431.0219727));
|
|
points.Add(new DataPoint(446.6270218, 428.7687378));
|
|
points.Add(new DataPoint(447.4476395, 426.4767151));
|
|
points.Add(new DataPoint(447.9032059, 424.1760559));
|
|
points.Add(new DataPoint(447.492012, 421.8969727));
|
|
points.Add(new DataPoint(445.6156082, 418.2295837));
|
|
points.Add(new DataPoint(443.3608475, 414.6139832));
|
|
points.Add(new DataPoint(438.1008682, 407.5364685));
|
|
points.Add(new DataPoint(432.48069, 400.6614685));
|
|
points.Add(new DataPoint(427.2689896, 393.9859619));
|
|
points.Add(new DataPoint(389.1699905, 339.2359619));
|
|
points.Add(new DataPoint(374.5550003, 318.3009644));
|
|
points.Add(new DataPoint(372.5515823, 314.8404541));
|
|
points.Add(new DataPoint(370.2787552, 310.9485779));
|
|
points.Add(new DataPoint(367.7467728, 307.2946777));
|
|
points.Add(new DataPoint(366.3868484, 305.7660828));
|
|
points.Add(new DataPoint(364.9659805, 304.5479736));
|
|
points.Add(new DataPoint(363.9477615, 304.0406799));
|
|
points.Add(new DataPoint(363.082222, 304.0159912));
|
|
points.Add(new DataPoint(361.6236038, 304.9024658));
|
|
points.Add(new DataPoint(360.2191849, 306.1834412));
|
|
points.Add(new DataPoint(359.4213638, 306.651886));
|
|
points.Add(new DataPoint(358.4979935, 306.8349609));
|
|
points.Add(new DataPoint(356.6694107, 306.4464722));
|
|
points.Add(new DataPoint(354.9371109, 305.5308228));
|
|
points.Add(new DataPoint(353.2544937, 304.4515076));
|
|
points.Add(new DataPoint(351.5749893, 303.5719604));
|
|
points.Add(new DataPoint(343.4895706, 301.1234131));
|
|
points.Add(new DataPoint(335.0169449, 299.8048401));
|
|
points.Add(new DataPoint(326.3076553, 299.5128174));
|
|
points.Add(new DataPoint(317.5122147, 300.1439514));
|
|
points.Add(new DataPoint(308.7811966, 301.5948486));
|
|
points.Add(new DataPoint(300.2651443, 303.762085));
|
|
points.Add(new DataPoint(292.1145401, 306.5422668));
|
|
points.Add(new DataPoint(284.4799881, 309.8319702));
|
|
points.Add(new DataPoint(282.3371964, 310.7483521));
|
|
points.Add(new DataPoint(279.925972, 311.644928));
|
|
points.Add(new DataPoint(274.7942581, 313.5763245));
|
|
points.Add(new DataPoint(270.0769119, 316.0212708));
|
|
points.Add(new DataPoint(268.1836319, 317.559845));
|
|
points.Add(new DataPoint(266.7659988, 319.3749695));
|
|
points.Add(new DataPoint(271.6227798, 320.1968384));
|
|
points.Add(new DataPoint(276.5877457, 321.7830811));
|
|
points.Add(new DataPoint(281.472847, 323.7190247));
|
|
points.Add(new DataPoint(286.090004, 325.5899658));
|
|
points.Add(new DataPoint(298.3649979, 330.7419739));
|
|
points.Add(new DataPoint(310.3880997, 336.8226929));
|
|
points.Add(new DataPoint(321.8024063, 343.941803));
|
|
points.Add(new DataPoint(332.2509842, 352.2089539));
|
|
points.Add(new DataPoint(339.2033768, 358.533844));
|
|
points.Add(new DataPoint(342.4841385, 361.901825));
|
|
points.Add(new DataPoint(345.4439774, 365.5359497));
|
|
points.Add(new DataPoint(346.445076, 367.0002136));
|
|
points.Add(new DataPoint(347.3386307, 368.7592163));
|
|
points.Add(new DataPoint(347.6443558, 370.5680847));
|
|
points.Add(new DataPoint(347.4267044, 371.4147034));
|
|
points.Add(new DataPoint(346.8819962, 372.1819458));
|
|
points.Add(new DataPoint(345.387001, 372.7861023));
|
|
points.Add(new DataPoint(343.5981216, 372.4627075));
|
|
points.Add(new DataPoint(341.8064041, 371.7001953));
|
|
points.Add(new DataPoint(340.3029861, 370.986969));
|
|
points.Add(new DataPoint(336.1688919, 369.4472046));
|
|
points.Add(new DataPoint(331.5998611, 368.1002197));
|
|
points.Add(new DataPoint(326.9541702, 367.1023254));
|
|
points.Add(new DataPoint(322.5899734, 366.6099548));
|
|
points.Add(new DataPoint(324.6785049, 369.6851501));
|
|
points.Add(new DataPoint(327.4601212, 372.3129578));
|
|
points.Add(new DataPoint(330.467659, 374.7735291));
|
|
points.Add(new DataPoint(333.2339859, 377.3469543));
|
|
points.Add(new DataPoint(338.3369217, 383.6273193));
|
|
points.Add(new DataPoint(342.70298, 390.7063293));
|
|
points.Add(new DataPoint(344.4534683, 394.4726563));
|
|
points.Add(new DataPoint(345.8323135, 398.3514099));
|
|
points.Add(new DataPoint(346.7769547, 402.3135376));
|
|
points.Add(new DataPoint(347.2249832, 406.3299561));
|
|
points.Add(new DataPoint(346.8078384, 412.0097046));
|
|
points.Add(new DataPoint(345.1297989, 416.5983276));
|
|
points.Add(new DataPoint(342.383522, 420.1838074));
|
|
points.Add(new DataPoint(338.7616043, 422.8540955));
|
|
points.Add(new DataPoint(334.4566727, 424.6971741));
|
|
points.Add(new DataPoint(329.6613541, 425.8010559));
|
|
points.Add(new DataPoint(324.5682449, 426.2536621));
|
|
points.Add(new DataPoint(319.3700027, 426.1429749));
|
|
points.Add(new DataPoint(315.144783, 425.6447144));
|
|
points.Add(new DataPoint(311.0141983, 424.7691345));
|
|
points.Add(new DataPoint(303.0388565, 422.0056763));
|
|
points.Add(new DataPoint(295.4478226, 418.0917969));
|
|
points.Add(new DataPoint(288.2450027, 413.2668457));
|
|
points.Add(new DataPoint(281.4342422, 407.769989));
|
|
points.Add(new DataPoint(275.0194168, 401.8405762));
|
|
points.Add(new DataPoint(269.0043716, 395.717804));
|
|
points.Add(new DataPoint(263.393013, 389.6409607));
|
|
points.Add(new DataPoint(255.0782547, 379.5436707));
|
|
points.Add(new DataPoint(247.6409988, 368.3999634));
|
|
points.Add(new DataPoint(244.4098587, 362.5210571));
|
|
points.Add(new DataPoint(241.5882645, 356.4829712));
|
|
points.Add(new DataPoint(239.2395096, 350.3198853));
|
|
points.Add(new DataPoint(237.4270096, 344.0659485));
|
|
points.Add(new DataPoint(236.2694168, 338.2407532));
|
|
points.Add(new DataPoint(235.5486526, 332.3677368));
|
|
points.Add(new DataPoint(235.0773697, 320.528717));
|
|
points.Add(new DataPoint(235.3326797, 308.6495667));
|
|
points.Add(new DataPoint(235.6340103, 296.8309631));
|
|
points.Add(new DataPoint(233.1889725, 297.9562988));
|
|
points.Add(new DataPoint(230.9140091, 299.4570923));
|
|
points.Add(new DataPoint(226.5090103, 302.6929626));
|
|
points.Add(new DataPoint(206.6489944, 315.875946));
|
|
points.Add(new DataPoint(157.2670059, 346.7819519));
|
|
points.Add(new DataPoint(136.8219986, 360.059967));
|
|
points.Add(new DataPoint(132.2092514, 363.0340881));
|
|
points.Add(new DataPoint(130.0033798, 364.6920166));
|
|
points.Add(new DataPoint(128.1559982, 366.6599731));
|
|
points.Add(new DataPoint(127.0190811, 368.5368958));
|
|
points.Add(new DataPoint(126.298027, 370.4631348));
|
|
points.Add(new DataPoint(125.9532547, 372.4280701));
|
|
points.Add(new DataPoint(125.9451218, 374.4211121));
|
|
points.Add(new DataPoint(126.7804031, 378.4490356));
|
|
points.Add(new DataPoint(128.4870071, 382.4620972));
|
|
points.Add(new DataPoint(130.748024, 386.3754272));
|
|
points.Add(new DataPoint(133.2466202, 390.104248));
|
|
points.Add(new DataPoint(135.6659012, 393.5636902));
|
|
points.Add(new DataPoint(137.689003, 396.6689453));
|
|
points.Add(new DataPoint(139.2043839, 400.197052));
|
|
points.Add(new DataPoint(139.5524673, 402.0329285));
|
|
points.Add(new DataPoint(139.5626297, 403.8374634));
|
|
points.Add(new DataPoint(139.1861954, 405.551239));
|
|
points.Add(new DataPoint(138.3745499, 407.1148682));
|
|
points.Add(new DataPoint(137.0790329, 408.4689026));
|
|
points.Add(new DataPoint(135.2509995, 409.5539551));
|
|
points.Add(new DataPoint(132.8812943, 410.31427));
|
|
points.Add(new DataPoint(130.5507584, 410.5262146));
|
|
points.Add(new DataPoint(128.270546, 410.2424316));
|
|
points.Add(new DataPoint(126.0518265, 409.5155334));
|
|
points.Add(new DataPoint(123.9057388, 408.3982239));
|
|
points.Add(new DataPoint(121.8434372, 406.9431458));
|
|
points.Add(new DataPoint(118.0148697, 403.2301941));
|
|
points.Add(new DataPoint(114.6553879, 398.7979126));
|
|
points.Add(new DataPoint(111.8542252, 394.0675049));
|
|
points.Add(new DataPoint(109.7006912, 389.4601135));
|
|
points.Add(new DataPoint(108.2840042, 385.3969727));
|
|
points.Add(new DataPoint(107.7778549, 382.5092468));
|
|
points.Add(new DataPoint(107.3788681, 379.2887268));
|
|
points.Add(new DataPoint(106.6309433, 376.2470703));
|
|
points.Add(new DataPoint(105.0779953, 373.8959656));
|
|
points.Add(new DataPoint(103.1701126, 372.6677246));
|
|
points.Add(new DataPoint(100.7825394, 371.7599487));
|
|
points.Add(new DataPoint(95.13137054, 370.6252136));
|
|
points.Add(new DataPoint(89.25051117, 369.9303284));
|
|
points.Add(new DataPoint(86.57584381, 369.5724182));
|
|
points.Add(new DataPoint(84.26599884, 369.1139526));
|
|
points.Add(new DataPoint(78.20024872, 367.3027649));
|
|
points.Add(new DataPoint(71.70685577, 364.820343));
|
|
points.Add(new DataPoint(65.1133194, 361.6892395));
|
|
points.Add(new DataPoint(58.74712372, 357.9318237));
|
|
points.Add(new DataPoint(52.93579102, 353.5706482));
|
|
points.Add(new DataPoint(48.00682831, 348.6281433));
|
|
points.Add(new DataPoint(45.97557068, 345.9458923));
|
|
points.Add(new DataPoint(44.28772736, 343.1267395));
|
|
points.Add(new DataPoint(42.98422241, 340.1734924));
|
|
points.Add(new DataPoint(42.10599518, 337.0889587));
|
|
points.Add(new DataPoint(41.90753937, 335.2592163));
|
|
points.Add(new DataPoint(42.08698273, 333.7605286));
|
|
points.Add(new DataPoint(43.18836975, 331.3730774));
|
|
points.Add(new DataPoint(44.62782288, 329.1598206));
|
|
points.Add(new DataPoint(45.6230011, 326.3539734));
|
|
points.Add(new DataPoint(45.62973022, 324.9945984));
|
|
points.Add(new DataPoint(45.33054352, 323.6192627));
|
|
points.Add(new DataPoint(44.36862183, 320.8330994));
|
|
points.Add(new DataPoint(43.98298645, 319.4284058));
|
|
points.Add(new DataPoint(43.84563446, 318.0201111));
|
|
points.Add(new DataPoint(44.09512329, 316.6112671));
|
|
points.Add(new DataPoint(44.86999512, 315.2049561));
|
|
points.Add(new DataPoint(45.80908966, 314.2088623));
|
|
points.Add(new DataPoint(46.79941559, 313.5540161));
|
|
points.Add(new DataPoint(48.9025116, 313.1113892));
|
|
points.Add(new DataPoint(51.11682129, 313.5637512));
|
|
points.Add(new DataPoint(53.37987518, 314.5978394));
|
|
points.Add(new DataPoint(57.8022995, 317.1580811));
|
|
points.Add(new DataPoint(59.83672333, 318.0577087));
|
|
points.Add(new DataPoint(61.6700058, 318.2859497));
|
|
points.Add(new DataPoint(62.82819366, 317.6254883));
|
|
points.Add(new DataPoint(63.23600006, 316.3283386));
|
|
points.Add(new DataPoint(63.24330902, 314.8067627));
|
|
points.Add(new DataPoint(63.20000458, 313.4729614));
|
|
points.Add(new DataPoint(63.68109894, 310.3050232));
|
|
points.Add(new DataPoint(64.93375397, 307.6513367));
|
|
points.Add(new DataPoint(67.09728241, 305.979187));
|
|
points.Add(new DataPoint(68.56415558, 305.6572571));
|
|
points.Add(new DataPoint(70.31099701, 305.7559509));
|
|
points.Add(new DataPoint(73.2078476, 306.4935913));
|
|
points.Add(new DataPoint(76.04866791, 307.6478271));
|
|
points.Add(new DataPoint(81.46486664, 310.9243164));
|
|
points.Add(new DataPoint(86.36489105, 315.0218811));
|
|
points.Add(new DataPoint(90.55399323, 319.3769531));
|
|
points.Add(new DataPoint(92.14154816, 321.4163208));
|
|
points.Add(new DataPoint(93.72263336, 323.6399536));
|
|
points.Add(new DataPoint(95.39614105, 325.7593689));
|
|
points.Add(new DataPoint(97.26099396, 327.4859619));
|
|
points.Add(new DataPoint(98.87421417, 328.2453918));
|
|
points.Add(new DataPoint(100.5960007, 328.4575806));
|
|
points.Add(new DataPoint(104.1259995, 328.1189575));
|
|
points.Add(new DataPoint(107.9671097, 328.0540771));
|
|
points.Add(new DataPoint(112.0256271, 328.345459));
|
|
points.Add(new DataPoint(116.0258255, 328.4305725));
|
|
points.Add(new DataPoint(119.6919937, 327.7469482));
|
|
points.Add(new DataPoint(122.6980515, 326.2321777));
|
|
points.Add(new DataPoint(125.5723801, 324.1764526));
|
|
points.Add(new DataPoint(128.3242722, 321.9129944));
|
|
points.Add(new DataPoint(130.9630051, 319.7749634));
|
|
points.Add(new DataPoint(158.6139908, 297.5969543));
|
|
points.Add(new DataPoint(183.9269943, 278.8919678));
|
|
points.Add(new DataPoint(215.7729874, 251.3609619));
|
|
points.Add(new DataPoint(222.6591263, 245.7957153));
|
|
points.Add(new DataPoint(229.6908646, 240.2703247));
|
|
points.Add(new DataPoint(236.5836563, 234.5932617));
|
|
points.Add(new DataPoint(243.0529861, 228.572937));
|
|
points.Add(new DataPoint(246.137764, 224.8230591));
|
|
points.Add(new DataPoint(248.7661209, 220.4605103));
|
|
points.Add(new DataPoint(251.0138321, 215.6484985));
|
|
points.Add(new DataPoint(252.9567337, 210.5499878));
|
|
points.Add(new DataPoint(256.2312393, 200.1459351));
|
|
points.Add(new DataPoint(257.7144547, 195.1665039));
|
|
points.Add(new DataPoint(259.1959915, 190.5529785));
|
|
points.Add(new DataPoint(263.9845047, 175.0708008));
|
|
points.Add(new DataPoint(267.8167191, 159.2056274));
|
|
points.Add(new DataPoint(270.6394424, 143.0612183));
|
|
points.Add(new DataPoint(272.3993607, 126.7412109));
|
|
points.Add(new DataPoint(273.043251, 110.3493042));
|
|
points.Add(new DataPoint(272.5178299, 93.98913574));
|
|
points.Add(new DataPoint(270.7698441, 77.76446533));
|
|
points.Add(new DataPoint(267.7460098, 61.77893066));
|
|
points.Add(new DataPoint(260.9010086, 28.45196533));
|
|
points.Add(new DataPoint(260.3377457, 25.5088501));
|
|
points.Add(new DataPoint(259.7099991, 22.24182129));
|
|
points.Add(new DataPoint(258.5879898, 19.265625));
|
|
points.Add(new DataPoint(257.7073746, 18.07867432));
|
|
points.Add(new DataPoint(256.5419998, 17.19494629));
|
|
points.Add(new DataPoint(254.5226212, 16.44396973));
|
|
points.Add(new DataPoint(252.1078568, 16.0401001));
|
|
points.Add(new DataPoint(246.5816116, 15.96911621));
|
|
points.Add(new DataPoint(240.9423294, 16.37298584));
|
|
points.Add(new DataPoint(238.3862076, 16.56274414));
|
|
points.Add(new DataPoint(236.1689835, 16.64294434));
|
|
points.Add(new DataPoint(185.1770096, 17.17895508));
|
|
points.Add(new DataPoint(0, 16.64294434));
|
|
points.Add(new DataPoint(0, 0.53894043));
|
|
points.Add(new DataPoint(188.9400101, 0.53894043));
|
|
points.Add(new DataPoint(242.0799942, 0.53894043));
|
|
points.Add(new DataPoint(244.6571732, 0.474975586));
|
|
points.Add(new DataPoint(247.5546951, 0.33001709));
|
|
points.Add(new DataPoint(253.8458633, 0.078552246));
|
|
points.Add(new DataPoint(260.0235977, 0.347839355));
|
|
points.Add(new DataPoint(262.779335, 0.853759766));
|
|
points.Add(new DataPoint(265.1579971, 1.70098877));
|
|
points.Add(new DataPoint(266.7366104, 2.746398926));
|
|
points.Add(new DataPoint(268.0821915, 4.172119141));
|
|
points.Add(new DataPoint(270.1900101, 7.797119141));
|
|
points.Add(new DataPoint(271.7128067, 11.84075928));
|
|
points.Add(new DataPoint(272.8819962, 15.56799316));
|
|
points.Add(new DataPoint(276.034523, 25.44775391));
|
|
points.Add(new DataPoint(279.0441055, 35.50836182));
|
|
points.Add(new DataPoint(281.6616287, 45.66326904));
|
|
points.Add(new DataPoint(283.6380081, 55.82598877));
|
|
points.Add(new DataPoint(285.7761917, 72.32995605));
|
|
points.Add(new DataPoint(287.0616837, 88.9072876));
|
|
points.Add(new DataPoint(287.4597855, 105.5118408));
|
|
points.Add(new DataPoint(286.9358597, 122.0977173));
|
|
points.Add(new DataPoint(285.4552994, 138.6187744));
|
|
points.Add(new DataPoint(282.9833755, 155.0289917));
|
|
points.Add(new DataPoint(279.4855118, 171.2824097));
|
|
points.Add(new DataPoint(274.9270096, 187.3329468));
|
|
points.Add(new DataPoint(271.4097672, 198.2474976));
|
|
points.Add(new DataPoint(267.3623734, 209.4165039));
|
|
points.Add(new DataPoint(262.4050369, 220.1444092));
|
|
points.Add(new DataPoint(259.4664688, 225.1257324));
|
|
points.Add(new DataPoint(256.1579971, 229.7359619));
|
|
points.Add(new DataPoint(249.3205032, 237.2365723));
|
|
points.Add(new DataPoint(241.720253, 244.1188354));
|
|
points.Add(new DataPoint(233.794136, 250.6709595));
|
|
points.Add(new DataPoint(225.9790115, 257.1809692));
|
|
points.Add(new DataPoint(195.5280228, 282.9415894));
|
|
points.Add(new DataPoint(164.2490005, 307.6559448));
|
|
points.Add(new DataPoint(141.1689987, 324.8109741));
|
|
points.Add(new DataPoint(133.2555008, 330.7440796));
|
|
points.Add(new DataPoint(129.0609055, 333.3323975));
|
|
points.Add(new DataPoint(124.5289993, 335.2859497));
|
|
points.Add(new DataPoint(122.1544113, 335.8482361));
|
|
points.Add(new DataPoint(119.7157364, 336.0837402));
|
|
points.Add(new DataPoint(114.7126236, 335.969696));
|
|
points.Add(new DataPoint(109.6527023, 335.7345581));
|
|
points.Add(new DataPoint(104.6689987, 336.1689453));
|
|
points.Add(new DataPoint(102.779686, 336.7739563));
|
|
points.Add(new DataPoint(100.6949997, 337.5380859));
|
|
points.Add(new DataPoint(98.61257172, 337.9761353));
|
|
points.Add(new DataPoint(96.73000336, 337.6029663));
|
|
points.Add(new DataPoint(94.59128571, 335.8127136));
|
|
points.Add(new DataPoint(92.66425323, 333.2740784));
|
|
points.Add(new DataPoint(90.92359161, 330.5338745));
|
|
points.Add(new DataPoint(89.34400177, 328.1389465));
|
|
points.Add(new DataPoint(87.08150482, 325.4346313));
|
|
points.Add(new DataPoint(84.48600006, 322.8813171));
|
|
points.Add(new DataPoint(78.90499115, 318.3849487));
|
|
points.Add(new DataPoint(77.3181076, 317.091217));
|
|
points.Add(new DataPoint(75.22336578, 315.5139465));
|
|
points.Add(new DataPoint(73.02420807, 314.5059509));
|
|
points.Add(new DataPoint(72.01151276, 314.4819031));
|
|
points.Add(new DataPoint(71.12400055, 314.9199524));
|
|
points.Add(new DataPoint(70.59803009, 315.7275085));
|
|
points.Add(new DataPoint(70.51831818, 316.7388916));
|
|
points.Add(new DataPoint(71.29537201, 319.0906982));
|
|
points.Add(new DataPoint(72.65048981, 321.4106445));
|
|
points.Add(new DataPoint(73.77899933, 323.1339722));
|
|
points.Add(new DataPoint(77.82125092, 329.0054626));
|
|
points.Add(new DataPoint(80.16477203, 331.7309265));
|
|
points.Add(new DataPoint(82.71099091, 334.177948));
|
|
points.Add(new DataPoint(84.92420197, 335.9799805));
|
|
points.Add(new DataPoint(87.10187531, 337.9599609));
|
|
points.Add(new DataPoint(88.68236542, 340.2526855));
|
|
points.Add(new DataPoint(89.07314301, 341.5584412));
|
|
points.Add(new DataPoint(89.10399628, 342.9929504));
|
|
points.Add(new DataPoint(89.61742401, 343.8485413));
|
|
points.Add(new DataPoint(89.34513092, 344.4684448));
|
|
points.Add(new DataPoint(88.5472641, 344.7538757));
|
|
points.Add(new DataPoint(87.48400116, 344.605957));
|
|
points.Add(new DataPoint(85.91378021, 343.8370972));
|
|
points.Add(new DataPoint(84.39550018, 342.7818298));
|
|
points.Add(new DataPoint(81.58899689, 340.4889526));
|
|
points.Add(new DataPoint(78.80124664, 338.1679382));
|
|
points.Add(new DataPoint(75.64672089, 335.4441223));
|
|
points.Add(new DataPoint(68.57024384, 329.6803589));
|
|
points.Add(new DataPoint(64.81476593, 327.0864868));
|
|
points.Add(new DataPoint(61.02541351, 324.9821167));
|
|
points.Add(new DataPoint(57.28540802, 323.5902405));
|
|
points.Add(new DataPoint(53.6780014, 323.1339722));
|
|
points.Add(new DataPoint(55.6113739, 326.1587524));
|
|
points.Add(new DataPoint(58.03131866, 328.9006653));
|
|
points.Add(new DataPoint(63.8632431, 333.7370911));
|
|
points.Add(new DataPoint(70.23856354, 338.0457153));
|
|
points.Add(new DataPoint(76.22199249, 342.2289734));
|
|
points.Add(new DataPoint(77.03455353, 342.7995605));
|
|
points.Add(new DataPoint(78.11525726, 343.5061951));
|
|
points.Add(new DataPoint(80.57563019, 345.232605));
|
|
points.Add(new DataPoint(82.59217072, 347.217926));
|
|
points.Add(new DataPoint(83.11811066, 348.24823));
|
|
points.Add(new DataPoint(83.15399933, 349.2719727));
|
|
points.Add(new DataPoint(82.68766022, 350.0397949));
|
|
points.Add(new DataPoint(81.87210846, 350.3486328));
|
|
points.Add(new DataPoint(79.6248703, 349.9825745));
|
|
points.Add(new DataPoint(77.27544403, 348.9604797));
|
|
points.Add(new DataPoint(76.33216095, 348.4492188));
|
|
points.Add(new DataPoint(75.68700409, 348.0689697));
|
|
points.Add(new DataPoint(66.5876236, 342.1790771));
|
|
points.Add(new DataPoint(61.90306854, 339.4937744));
|
|
points.Add(new DataPoint(56.897995, 337.35495));
|
|
points.Add(new DataPoint(55.17505646, 336.726532));
|
|
points.Add(new DataPoint(53.01000214, 336.1444702));
|
|
points.Add(new DataPoint(51.04743958, 336.2538757));
|
|
points.Add(new DataPoint(50.34353638, 336.7695007));
|
|
points.Add(new DataPoint(49.93199921, 337.6999512));
|
|
points.Add(new DataPoint(50.0814743, 339.3566589));
|
|
points.Add(new DataPoint(51.06142426, 341.0038757));
|
|
points.Add(new DataPoint(52.65550232, 342.6039124));
|
|
points.Add(new DataPoint(54.64737701, 344.1190796));
|
|
points.Add(new DataPoint(58.95914459, 346.743988));
|
|
points.Add(new DataPoint(60.84635162, 347.7783203));
|
|
points.Add(new DataPoint(62.26599884, 348.5769653));
|
|
points.Add(new DataPoint(70.1079483, 352.9052734));
|
|
points.Add(new DataPoint(78.1873703, 356.6586914));
|
|
points.Add(new DataPoint(86.4916153, 359.8837585));
|
|
points.Add(new DataPoint(95.00800323, 362.6269531));
|
|
points.Add(new DataPoint(96.84983063, 363.0866394));
|
|
points.Add(new DataPoint(98.97579193, 363.5275574));
|
|
points.Add(new DataPoint(103.6091232, 364.5426941));
|
|
points.Add(new DataPoint(107.965889, 366.0517273));
|
|
points.Add(new DataPoint(109.7461472, 367.1099854));
|
|
points.Add(new DataPoint(111.1039963, 368.43396));
|
|
points.Add(new DataPoint(112.0068741, 370.5414429));
|
|
points.Add(new DataPoint(112.4139938, 373.21521));
|
|
points.Add(new DataPoint(112.6441269, 375.9950867));
|
|
points.Add(new DataPoint(113.0159988, 378.4209595));
|
|
points.Add(new DataPoint(113.902565, 381.2496643));
|
|
points.Add(new DataPoint(115.2284775, 384.6081543));
|
|
points.Add(new DataPoint(116.9393082, 388.2300415));
|
|
points.Add(new DataPoint(118.980629, 391.8488464));
|
|
points.Add(new DataPoint(121.2979813, 395.1981506));
|
|
points.Add(new DataPoint(123.8369522, 398.0115662));
|
|
points.Add(new DataPoint(126.5430984, 400.022644));
|
|
points.Add(new DataPoint(129.3619919, 400.9649658));
|
|
points.Add(new DataPoint(128.5566483, 397.5397949));
|
|
points.Add(new DataPoint(126.8852463, 394.5133362));
|
|
points.Add(new DataPoint(124.8594742, 391.6261902));
|
|
points.Add(new DataPoint(122.9910049, 388.6189575));
|
|
points.Add(new DataPoint(120.504631, 382.5281982));
|
|
points.Add(new DataPoint(119.1972427, 376.1178589));
|
|
points.Add(new DataPoint(119.0547104, 372.875061));
|
|
points.Add(new DataPoint(119.2897568, 369.6510315));
|
|
points.Add(new DataPoint(119.9299698, 366.4787292));
|
|
points.Add(new DataPoint(121.0029984, 363.3909607));
|
|
points.Add(new DataPoint(122.9761124, 359.8041687));
|
|
points.Add(new DataPoint(125.5510788, 356.6000061));
|
|
points.Add(new DataPoint(128.5915298, 353.7098083));
|
|
points.Add(new DataPoint(131.9611282, 351.0648499));
|
|
points.Add(new DataPoint(139.1423569, 346.2359619));
|
|
points.Add(new DataPoint(146.0040054, 341.5639648));
|
|
points.Add(new DataPoint(153.3126602, 336.4172363));
|
|
points.Add(new DataPoint(160.8510056, 331.6148376));
|
|
points.Add(new DataPoint(176.060997, 322.2139587));
|
|
points.Add(new DataPoint(223.2120132, 292.0619507));
|
|
points.Add(new DataPoint(241.0090103, 281.0089722));
|
|
points.Add(new DataPoint(244.4554214, 278.2832642));
|
|
points.Add(new DataPoint(248.0213699, 275.5827026));
|
|
points.Add(new DataPoint(251.8383865, 273.5125122));
|
|
points.Add(new DataPoint(253.8821487, 272.9029541));
|
|
points.Add(new DataPoint(256.038002, 272.677948));
|
|
points.Add(new DataPoint(255.5765762, 275.73526));
|
|
points.Add(new DataPoint(254.4421158, 278.3285828));
|
|
points.Add(new DataPoint(252.9171219, 280.7803345));
|
|
points.Add(new DataPoint(251.2840042, 283.4129639));
|
|
points.Add(new DataPoint(249.1513138, 287.4288635));
|
|
points.Add(new DataPoint(247.2273636, 291.7029724));
|
|
points.Add(new DataPoint(245.725502, 296.1263123));
|
|
points.Add(new DataPoint(244.8589859, 300.5899658));
|
|
points.Add(new DataPoint(244.4298477, 307.2876587));
|
|
points.Add(new DataPoint(244.5635757, 313.9535828));
|
|
points.Add(new DataPoint(245.2291336, 320.570282));
|
|
points.Add(new DataPoint(246.3955154, 327.1204224));
|
|
points.Add(new DataPoint(248.0315933, 333.5866089));
|
|
points.Add(new DataPoint(250.1063919, 339.951416));
|
|
points.Add(new DataPoint(252.5888138, 346.1975098));
|
|
points.Add(new DataPoint(255.4478531, 352.3074646));
|
|
points.Add(new DataPoint(262.1715469, 364.0494385));
|
|
points.Add(new DataPoint(270.0290298, 375.0382385));
|
|
points.Add(new DataPoint(278.7719803, 385.1347656));
|
|
points.Add(new DataPoint(288.1519852, 394.1999512));
|
|
points.Add(new DataPoint(294.92173, 399.6752014));
|
|
points.Add(new DataPoint(302.1428604, 404.5257263));
|
|
points.Add(new DataPoint(309.7718277, 408.7135925));
|
|
points.Add(new DataPoint(317.7649918, 412.2009583));
|
|
points.Add(new DataPoint(322.0982132, 413.5901184));
|
|
points.Add(new DataPoint(326.4935989, 414.2129517));
|
|
points.Add(new DataPoint(328.6687698, 414.1019592));
|
|
points.Add(new DataPoint(330.8044205, 413.6372986));
|
|
points.Add(new DataPoint(332.8823013, 412.7649841));
|
|
points.Add(new DataPoint(334.8839798, 411.4309692));
|
|
points.Add(new DataPoint(336.700325, 409.4726868));
|
|
points.Add(new DataPoint(337.756813, 407.2593689));
|
|
points.Add(new DataPoint(338.1652908, 404.8675537));
|
|
points.Add(new DataPoint(338.0374832, 402.3738403));
|
|
points.Add(new DataPoint(337.4851761, 399.8547668));
|
|
points.Add(new DataPoint(336.6201553, 397.3868713));
|
|
points.Add(new DataPoint(334.3989944, 392.9109497));
|
|
points.Add(new DataPoint(331.2719803, 388.0760193));
|
|
points.Add(new DataPoint(327.7468643, 383.5949097));
|
|
points.Add(new DataPoint(319.7087479, 375.5498352));
|
|
points.Add(new DataPoint(310.6974869, 368.4870605));
|
|
points.Add(new DataPoint(301.1259842, 362.1179504));
|
|
points.Add(new DataPoint(289.341011, 355.3789673));
|
|
points.Add(new DataPoint(288.3749161, 354.5166321));
|
|
points.Add(new DataPoint(287.4871292, 353.3829651));
|
|
points.Add(new DataPoint(287.1665115, 352.1690369));
|
|
points.Add(new DataPoint(287.3716812, 351.5917053));
|
|
points.Add(new DataPoint(287.9019852, 351.0659485));
|
|
points.Add(new DataPoint(290.0786819, 350.5000305));
|
|
points.Add(new DataPoint(292.8593826, 350.8098145));
|
|
points.Add(new DataPoint(295.6623917, 351.5259399));
|
|
points.Add(new DataPoint(297.9060135, 352.1789551));
|
|
points.Add(new DataPoint(300.6676102, 353.0059814));
|
|
points.Add(new DataPoint(303.7700882, 354.0613708));
|
|
points.Add(new DataPoint(310.5398636, 356.3453369));
|
|
points.Add(new DataPoint(313.9782486, 357.3178101));
|
|
points.Add(new DataPoint(317.2997208, 358.0065918));
|
|
points.Add(new DataPoint(320.3897781, 358.2836609));
|
|
points.Add(new DataPoint(323.1339798, 358.0209656));
|
|
points.Add(new DataPoint(311.4509048, 349.4853516));
|
|
points.Add(new DataPoint(299.2507401, 341.6953125));
|
|
points.Add(new DataPoint(286.5124283, 334.8171387));
|
|
points.Add(new DataPoint(273.215004, 329.0169678));
|
|
points.Add(new DataPoint(258.7229996, 323.8179626));
|
|
points.Add(new DataPoint(257.2878494, 323.337738));
|
|
points.Add(new DataPoint(255.7744827, 322.6670837));
|
|
points.Add(new DataPoint(254.4943924, 321.7168884));
|
|
points.Add(new DataPoint(253.7590103, 320.3979492));
|
|
points.Add(new DataPoint(253.827034, 319.0723267));
|
|
points.Add(new DataPoint(254.5322647, 317.7234802));
|
|
points.Add(new DataPoint(255.711647, 316.3885193));
|
|
points.Add(new DataPoint(257.2022476, 315.1045837));
|
|
points.Add(new DataPoint(260.465126, 312.8383789));
|
|
points.Add(new DataPoint(261.9114456, 311.9303589));
|
|
points.Add(new DataPoint(263.0170059, 311.2219543));
|
|
points.Add(new DataPoint(271.8112259, 305.8678284));
|
|
points.Add(new DataPoint(281.198616, 301.1617126));
|
|
points.Add(new DataPoint(290.8884659, 297.0829773));
|
|
points.Add(new DataPoint(300.590004, 293.6109619));
|
|
points.Add(new DataPoint(310.0823746, 291.1308289));
|
|
points.Add(new DataPoint(319.4608536, 289.9150696));
|
|
points.Add(new DataPoint(328.9314041, 289.7652893));
|
|
points.Add(new DataPoint(338.6999893, 290.4829712));
|
|
points.Add(new DataPoint(354.2659988, 293.3499451));
|
|
points.Add(new DataPoint(355.8602982, 293.1119995));
|
|
points.Add(new DataPoint(357.197731, 292.2803345));
|
|
points.Add(new DataPoint(358.3595047, 291.0731506));
|
|
points.Add(new DataPoint(359.4267349, 289.7085876));
|
|
points.Add(new DataPoint(360.4805679, 288.4048157));
|
|
points.Add(new DataPoint(361.6021194, 287.3800049));
|
|
points.Add(new DataPoint(362.8725357, 286.8523254));
|
|
points.Add(new DataPoint(364.3729935, 287.0399475));
|
|
points.Add(new DataPoint(365.9158707, 287.8427734));
|
|
points.Add(new DataPoint(367.3995438, 289.0066833));
|
|
points.Add(new DataPoint(370.1699905, 292.0510864));
|
|
points.Add(new DataPoint(372.6456985, 295.4399109));
|
|
points.Add(new DataPoint(374.788002, 298.4399719));
|
|
points.Add(new DataPoint(394.8579788, 325.8149719));
|
|
points.Add(new DataPoint(397.3873978, 329.0663757));
|
|
points.Add(new DataPoint(399.9987259, 332.6233521));
|
|
points.Add(new DataPoint(402.1026993, 336.3991089));
|
|
points.Add(new DataPoint(402.7802811, 338.3419189));
|
|
points.Add(new DataPoint(403.109993, 340.3069458));
|
|
points.Add(new DataPoint(403.7992325, 340.2913818));
|
|
points.Add(new DataPoint(404.1172256, 340.3743286));
|
|
points.Add(new DataPoint(404.2001114, 340.691864));
|
|
points.Add(new DataPoint(404.1839981, 341.3799744));
|
|
points.Add(new DataPoint(405.9170609, 342.5977478));
|
|
points.Add(new DataPoint(407.5672379, 344.3135681));
|
|
points.Add(new DataPoint(410.6323624, 348.6974487));
|
|
points.Add(new DataPoint(413.4063187, 353.4481201));
|
|
points.Add(new DataPoint(414.6925125, 355.6223755));
|
|
points.Add(new DataPoint(415.9159927, 357.4819641));
|
|
points.Add(new DataPoint(446.1409988, 402.5239563));
|
|
points.Add(new DataPoint(447.8941116, 404.6854248));
|
|
points.Add(new DataPoint(449.9755325, 406.9086609));
|
|
points.Add(new DataPoint(454.483345, 411.5653381));
|
|
points.Add(new DataPoint(456.5896683, 414.0111694));
|
|
points.Add(new DataPoint(458.3842239, 416.5435791));
|
|
points.Add(new DataPoint(459.7070389, 419.1687927));
|
|
points.Add(new DataPoint(460.3980179, 421.8929749));
|
|
points.Add(new DataPoint(460.330513, 423.2209473));
|
|
points.Add(new DataPoint(459.8673782, 424.4043274));
|
|
points.Add(new DataPoint(458.1563797, 426.4813232));
|
|
points.Add(new DataPoint(456.0694046, 428.4118958));
|
|
points.Add(new DataPoint(454.4110184, 430.4839478));
|
|
points.Add(new DataPoint(453.6341629, 432.6287231));
|
|
points.Add(new DataPoint(453.2503738, 434.9552002));
|
|
points.Add(new DataPoint(452.6709671, 439.6079712));
|
|
points.Add(new DataPoint(451.6133499, 443.3995361));
|
|
points.Add(new DataPoint(450.0984573, 447.2178345));
|
|
points.Add(new DataPoint(448.1988602, 450.8544312));
|
|
points.Add(new DataPoint(445.9870071, 454.1009521));
|
|
points.Add(new DataPoint(445.2327957, 454.9499512));
|
|
points.Add(new DataPoint(444.120369, 456.1347046));
|
|
points.Add(new DataPoint(441.6337357, 459.0782166));
|
|
points.Add(new DataPoint(440.6658401, 460.6203003));
|
|
points.Add(new DataPoint(440.1524734, 462.0648193));
|
|
points.Add(new DataPoint(440.2967911, 463.3034973));
|
|
points.Add(new DataPoint(441.3020096, 464.2279663));
|
|
points.Add(new DataPoint(443.0089798, 464.4325867));
|
|
points.Add(new DataPoint(444.7705154, 463.7559509));
|
|
points.Add(new DataPoint(446.3872757, 462.6180725));
|
|
points.Add(new DataPoint(447.6599808, 461.4389648));
|
|
points.Add(new DataPoint(449.96418, 458.7336426));
|
|
points.Add(new DataPoint(451.896492, 455.7789612));
|
|
points.Add(new DataPoint(454.7979813, 449.3179626));
|
|
points.Add(new DataPoint(455.2873001, 447.6248474));
|
|
points.Add(new DataPoint(455.8775101, 445.8508301));
|
|
points.Add(new DataPoint(456.8382034, 444.3796387));
|
|
points.Add(new DataPoint(458.4389725, 443.5949707));
|
|
points.Add(new DataPoint(460.0345535, 443.7620239));
|
|
points.Add(new DataPoint(461.7698441, 444.6128235));
|
|
points.Add(new DataPoint(463.5780106, 445.9676208));
|
|
points.Add(new DataPoint(465.3921585, 447.6465759));
|
|
points.Add(new DataPoint(468.7708817, 451.2580566));
|
|
points.Add(new DataPoint(470.2016678, 452.8309631));
|
|
points.Add(new DataPoint(471.3709793, 454.0089722));
|
|
points.Add(new DataPoint(478.8518143, 460.0104675));
|
|
points.Add(new DataPoint(486.9943924, 465.3340759));
|
|
points.Add(new DataPoint(495.4878006, 470.1171265));
|
|
points.Add(new DataPoint(504.0210037, 474.4969482));
|
|
points.Add(new DataPoint(509.5540848, 477.1457214));
|
|
points.Add(new DataPoint(515.2860184, 479.3189697));
|
|
points.Add(new DataPoint(516.4008255, 479.6032104));
|
|
points.Add(new DataPoint(517.6022415, 479.6870728));
|
|
points.Add(new DataPoint(518.5872879, 479.3061523));
|
|
points.Add(new DataPoint(519.0529861, 478.1959534));
|
|
points.Add(new DataPoint(518.8626175, 476.8864441));
|
|
points.Add(new DataPoint(518.1857986, 475.7019958));
|
|
points.Add(new DataPoint(515.84095, 473.7122192));
|
|
points.Add(new DataPoint(512.9545975, 472.234314));
|
|
points.Add(new DataPoint(510.4629593, 471.2759705));
|
|
points.Add(new DataPoint(507.6074905, 470.256958));
|
|
points.Add(new DataPoint(504.0599442, 468.8930969));
|
|
points.Add(new DataPoint(496.255867, 465.2143555));
|
|
points.Add(new DataPoint(492.682869, 462.9411621));
|
|
points.Add(new DataPoint(489.7850418, 460.4066467));
|
|
points.Add(new DataPoint(487.9041214, 457.6316223));
|
|
points.Add(new DataPoint(487.4518509, 456.1604309));
|
|
points.Add(new DataPoint(487.3819656, 454.6369629));
|
|
points.Add(new DataPoint(491.1286697, 455.6597595));
|
|
points.Add(new DataPoint(494.7612381, 457.2131958));
|
|
points.Add(new DataPoint(498.3274002, 458.9732666));
|
|
points.Add(new DataPoint(501.8750076, 460.6159668));
|
|
points.Add(new DataPoint(508.6896439, 463.2619934));
|
|
points.Add(new DataPoint(515.7986526, 465.5415649));
|
|
points.Add(new DataPoint(523.0577469, 467.2131042));
|
|
points.Add(new DataPoint(530.3230057, 468.0349731));
|
|
points.Add(new DataPoint(536.5177689, 468.0764465));
|
|
points.Add(new DataPoint(542.669014, 467.3979492));
|
|
points.Add(new DataPoint(543.9200516, 466.9833069));
|
|
points.Add(new DataPoint(545.0242386, 466.2348328));
|
|
points.Add(new DataPoint(545.5588455, 465.2004089));
|
|
points.Add(new DataPoint(545.1009598, 463.927948));
|
|
points.Add(new DataPoint(544.175972, 463.0953064));
|
|
points.Add(new DataPoint(542.9511795, 462.4622803));
|
|
points.Add(new DataPoint(539.9430008, 461.6712036));
|
|
points.Add(new DataPoint(536.7585526, 461.3072815));
|
|
points.Add(new DataPoint(534.0799637, 461.1229553));
|
|
points.Add(new DataPoint(520.8706131, 459.9545898));
|
|
points.Add(new DataPoint(514.2815628, 459.0859985));
|
|
points.Add(new DataPoint(507.7789993, 457.8509521));
|
|
points.Add(new DataPoint(506.4525833, 457.5542603));
|
|
points.Add(new DataPoint(504.8121414, 457.1582336));
|
|
points.Add(new DataPoint(501.1944656, 455.9819641));
|
|
points.Add(new DataPoint(499.5198441, 455.1585083));
|
|
points.Add(new DataPoint(498.1362991, 454.1494141));
|
|
points.Add(new DataPoint(497.1952591, 452.9331055));
|
|
points.Add(new DataPoint(496.8479691, 451.4879456));
|
|
points.Add(new DataPoint(497.117012, 450.6549377));
|
|
points.Add(new DataPoint(497.8393021, 450.1732788));
|
|
points.Add(new DataPoint(500.1341019, 449.9840698));
|
|
points.Add(new DataPoint(502.7133255, 450.3605652));
|
|
points.Add(new DataPoint(503.7911453, 450.5859985));
|
|
points.Add(new DataPoint(504.557991, 450.7429504));
|
|
points.Add(new DataPoint(511.3823318, 451.3563843));
|
|
points.Add(new DataPoint(518.3227615, 451.0169373));
|
|
points.Add(new DataPoint(525.2244949, 449.9740295));
|
|
points.Add(new DataPoint(531.932991, 448.4769592));
|
|
points.Add(new DataPoint(532.8128738, 448.2760315));
|
|
points.Add(new DataPoint(534.1250076, 447.9761353));
|
|
points.Add(new DataPoint(537.3393631, 447.0833435));
|
|
points.Add(new DataPoint(538.8882523, 446.4923706));
|
|
points.Add(new DataPoint(540.1627884, 445.8063354));
|
|
points.Add(new DataPoint(540.9862747, 445.0262146));
|
|
points.Add(new DataPoint(541.1820145, 444.1529541));
|
|
points.Add(new DataPoint(540.6489334, 443.4705505));
|
|
points.Add(new DataPoint(539.4853592, 443.0022888));
|
|
points.Add(new DataPoint(537.8792191, 442.7068176));
|
|
points.Add(new DataPoint(536.0183792, 442.5428467));
|
|
points.Add(new DataPoint(532.2842484, 442.4439392));
|
|
points.Add(new DataPoint(530.7866898, 442.4263916));
|
|
points.Add(new DataPoint(529.7860184, 442.3749695));
|
|
points.Add(new DataPoint(522.7177811, 441.8120117));
|
|
points.Add(new DataPoint(515.5401077, 441.6993408));
|
|
points.Add(new DataPoint(501.2470169, 442.2559509));
|
|
points.Add(new DataPoint(498.6232986, 442.5908508));
|
|
points.Add(new DataPoint(495.6024857, 442.9595947));
|
|
points.Add(new DataPoint(492.7076492, 442.7930298));
|
|
points.Add(new DataPoint(491.4709549, 442.3311157));
|
|
points.Add(new DataPoint(490.4619827, 441.5219727));
|
|
points.Add(new DataPoint(489.3800125, 439.9010925));
|
|
points.Add(new DataPoint(488.6179276, 438.0290833));
|
|
points.Add(new DataPoint(487.6418533, 433.8266907));
|
|
points.Add(new DataPoint(486.7113724, 429.5046997));
|
|
points.Add(new DataPoint(486.0061722, 427.4831848));
|
|
points.Add(new DataPoint(485.0039749, 425.6529541));
|
|
points.Add(new DataPoint(464.5570145, 397.51297));
|
|
points.Add(new DataPoint(441.859993, 359.0939636));
|
|
points.Add(new DataPoint(419.5407486, 322.4837036));
|
|
points.Add(new DataPoint(397.7539749, 285.5569458));
|
|
points.Add(new DataPoint(392.6534195, 277.3995361));
|
|
points.Add(new DataPoint(387.2727432, 269.1647034));
|
|
points.Add(new DataPoint(382.4174271, 260.6722412));
|
|
points.Add(new DataPoint(380.4385147, 256.2730713));
|
|
points.Add(new DataPoint(378.8929825, 251.7419434));
|
|
points.Add(new DataPoint(378.4342422, 247.8017578));
|
|
points.Add(new DataPoint(378.8919754, 243.618103));
|
|
points.Add(new DataPoint(379.8762283, 239.4705811));
|
|
points.Add(new DataPoint(380.9969864, 235.6389771));
|
|
points.Add(new DataPoint(388.6119766, 208.7999878));
|
|
points.Add(new DataPoint(391.0815811, 198.9997559));
|
|
points.Add(new DataPoint(393.3593521, 188.8963623));
|
|
points.Add(new DataPoint(395.3594131, 178.5748901));
|
|
points.Add(new DataPoint(396.9958572, 168.1204834));
|
|
points.Add(new DataPoint(398.1828384, 157.6182251));
|
|
points.Add(new DataPoint(398.8344498, 147.1533203));
|
|
points.Add(new DataPoint(398.8647842, 136.8108521));
|
|
points.Add(new DataPoint(398.1879959, 126.6759644));
|
|
points.Add(new DataPoint(395.2633438, 103.3844604));
|
|
points.Add(new DataPoint(393.3301468, 91.60638428));
|
|
points.Add(new DataPoint(390.9952469, 79.85656738));
|
|
points.Add(new DataPoint(388.1928177, 68.22253418));
|
|
points.Add(new DataPoint(384.8570328, 56.79168701));
|
|
points.Add(new DataPoint(380.9220352, 45.65136719));
|
|
points.Add(new DataPoint(376.3219986, 34.88897705));
|
|
points.Add(new DataPoint(371.1558609, 23.22259521));
|
|
points.Add(new DataPoint(366.6760025, 11.27197266));
|
|
points.Add(new DataPoint(365.8827591, 9.214355469));
|
|
points.Add(new DataPoint(365.0445023, 6.805603027));
|
|
points.Add(new DataPoint(364.7049942, 4.406799316));
|
|
points.Add(new DataPoint(364.892189, 3.323974609));
|
|
points.Add(new DataPoint(365.4079971, 2.378967285));
|
|
points.Add(new DataPoint(366.5955276, 1.439331055));
|
|
points.Add(new DataPoint(368.2348099, 0.826660156));
|
|
points.Add(new DataPoint(372.3311234, 0.333557129));
|
|
points.Add(new DataPoint(376.6218643, 0.40246582));
|
|
points.Add(new DataPoint(378.5041885, 0.4921875));
|
|
points.Add(new DataPoint(380.0319901, 0.535949707));
|
|
points.Add(new DataPoint(420.2889786, 0));
|
|
points.Add(new DataPoint(527.1040115, 0));
|
|
points.Add(new DataPoint(558.0751419, 0.09362793));
|
|
points.Add(new DataPoint(573.5140457, 0.204589844));
|
|
points.Add(new DataPoint(588.6629715, 0.352966309));
|
|
points.Add(new DataPoint(588.6629715, 0.352966309));
|
|
return points;
|
|
}
|
|
|
|
[Example("Conway's Game of Life")]
|
|
public static PlotModel ConwayLife()
|
|
{
|
|
// http://en.wikipedia.org/wiki/Conway's_Game_of_Life
|
|
var model = new PlotModel { Title = "Conway's Game of Life", Subtitle = "Click the mouse to step to the next generation." };
|
|
model.Axes.Add(new LinearAxis { Position = AxisPosition.Left, StartPosition = 1, EndPosition = 0 });
|
|
model.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom });
|
|
int m = 40;
|
|
int n = 40;
|
|
var matrix = new double[m, n];
|
|
var ms = new MatrixSeries { Matrix = matrix };
|
|
|
|
Action<int, int> blinker = (i, j) => { matrix[i, j] = matrix[i, j + 1] = matrix[i, j + 2] = 1; };
|
|
Action<int, int> glider = (i, j) => { matrix[i, j] = matrix[i + 1, j + 1] = matrix[i + 1, j + 2] = matrix[i + 2, j] = matrix[i + 2, j + 1] = 1; };
|
|
Action<int, int> rpentomino = (i, j) => { matrix[i, j + 1] = matrix[i, j + 2] = matrix[i + 1, j] = matrix[i + 1, j + 1] = matrix[i + 2, j + 1] = 1; };
|
|
|
|
blinker(2, 10);
|
|
glider(2, 2);
|
|
rpentomino(20, 20);
|
|
|
|
model.Series.Add(ms);
|
|
int g = 0;
|
|
Action stepToNextGeneration = () =>
|
|
{
|
|
var next = new double[m, n];
|
|
for (int i = 1; i < m - 1; i++)
|
|
{
|
|
for (int j = 1; j < n - 1; j++)
|
|
{
|
|
int k = (int)(matrix[i - 1, j - 1] + matrix[i - 1, j] + matrix[i - 1, j + 1] + matrix[i, j - 1]
|
|
+ matrix[i, j + 1] + matrix[i + 1, j - 1] + matrix[i + 1, j]
|
|
+ matrix[i + 1, j + 1]);
|
|
|
|
if (matrix[i, j].Equals(0) && k == 3)
|
|
{
|
|
// Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction.
|
|
next[i, j] = 1;
|
|
continue;
|
|
}
|
|
|
|
if (matrix[i, j].Equals(1) && (k == 2 || k == 3))
|
|
{
|
|
// Any live cell with two or three live neighbours lives on to the next generation.
|
|
next[i, j] = 1;
|
|
}
|
|
|
|
// Any live cell with fewer than two live neighbours dies, as if caused by under-population.
|
|
// Any live cell with more than three live neighbours dies, as if by overcrowding.
|
|
}
|
|
}
|
|
|
|
g++;
|
|
ms.Title = "Generation " + g;
|
|
ms.Matrix = matrix = next;
|
|
model.InvalidatePlot(true);
|
|
};
|
|
|
|
model.MouseDown += (s, e) =>
|
|
{
|
|
if (e.ChangedButton == OxyMouseButton.Left)
|
|
{
|
|
stepToNextGeneration();
|
|
e.Handled = true;
|
|
}
|
|
};
|
|
|
|
return model;
|
|
}
|
|
|
|
[Example("Mandelbrot custom series")]
|
|
public static PlotModel Mandelbrot()
|
|
{
|
|
// http://en.wikipedia.org/wiki/Mandelbrot_set
|
|
var model = new PlotModel { Title = "The Mandelbrot set" };
|
|
model.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Minimum = -1.4, Maximum = 1.4 });
|
|
model.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, Minimum = -2, Maximum = 1 });
|
|
model.Axes.Add(
|
|
new LinearColorAxis
|
|
{
|
|
Position = AxisPosition.Right,
|
|
Minimum = 0,
|
|
Maximum = 64,
|
|
Palette = OxyPalettes.Jet(64),
|
|
HighColor = OxyColors.Black
|
|
});
|
|
model.Series.Add(new MandelbrotSetSeries());
|
|
return model;
|
|
}
|
|
|
|
[Example("Julia set custom series")]
|
|
public static PlotModel JuliaSet()
|
|
{
|
|
// http://en.wikipedia.org/wiki/Julia_set
|
|
var model = new PlotModel { Subtitle = "Click and move the mouse" };
|
|
model.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Minimum = -2, Maximum = 2 });
|
|
model.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, Minimum = -2.5, Maximum = 2.5 });
|
|
model.Axes.Add(
|
|
new LinearColorAxis
|
|
{
|
|
Position = AxisPosition.Right,
|
|
Minimum = 0,
|
|
Maximum = 64,
|
|
Palette = OxyPalettes.Jet(64),
|
|
HighColor = OxyColors.Black
|
|
});
|
|
|
|
var jss = new JuliaSetSeries();
|
|
|
|
// Delegate to set the c and title
|
|
Action<double, double> setConstant = (c1, c2) =>
|
|
{
|
|
jss.C1 = c1;
|
|
jss.C2 = c2;
|
|
model.Title = string.Format("The Julia set, c={0:0.00000}+{1:0.00000}i", jss.C1, jss.C2);
|
|
};
|
|
|
|
// Update the c by the position where the mouse was clicked/moved
|
|
Action<OxyMouseEventArgs> handleMouseEvent = e =>
|
|
{
|
|
var c = jss.InverseTransform(e.Position);
|
|
setConstant(c.X, c.Y);
|
|
model.InvalidatePlot(true);
|
|
e.Handled = true;
|
|
};
|
|
jss.MouseDown += (s, e) => handleMouseEvent(e);
|
|
jss.MouseMove += (s, e) => handleMouseEvent(e);
|
|
|
|
// set the initial c
|
|
setConstant(-0.726895347709114071439, 0.188887129043845954792);
|
|
|
|
model.Series.Add(jss);
|
|
return model;
|
|
}
|
|
|
|
[Example("Elephant curve")]
|
|
public static PlotModel ElephantCurve()
|
|
{
|
|
// http://www.wolframalpha.com/input/?i=elephant+curve
|
|
// See also https://gist.github.com/purem/4687549/raw/8dda1f16cc70469aedecec19af1530534eadbae3/Wolfram+alpha+named+parametric+curves
|
|
Func<double, double> sin = Math.Sin;
|
|
Func<double, double> x =
|
|
t =>
|
|
-27d / 5 * sin(3d / 2 - 30 * t) - 16d / 3 * sin(9d / 8 - 29 * t) - 29d / 5 * sin(5d / 4 - 27 * t)
|
|
- 8d / 3 * sin(1d / 4 - 26 * t) - 25d / 7 * sin(1d / 3 - 25 * t) - 31d / 4 * sin(4d / 7 - 22 * t)
|
|
- 25d / 4 * sin(4d / 3 - 20 * t) - 33d / 2 * sin(2d / 3 - 19 * t) - 67d / 4 * sin(6d / 5 - 16 * t)
|
|
- 100d / 11 * sin(1d / 4 - 10 * t) - 425d / 7 * sin(1 - 4 * t) + 149d / 4 * sin(8 * t)
|
|
+ 1172d / 3 * sin(t + 21d / 5) + 661d / 11 * sin(2 * t + 3) + 471d / 8 * sin(3 * t + 10d / 7)
|
|
+ 211d / 7 * sin(5 * t + 13d / 4) + 39d / 4 * sin(6 * t + 10d / 7) + 139d / 10 * sin(7 * t + 7d / 6)
|
|
+ 77d / 3 * sin(9 * t + 18d / 7) + 135d / 8 * sin(11 * t + 1d / 2) + 23d / 4 * sin(12 * t + 8d / 5)
|
|
+ 95d / 4 * sin(13 * t + 4) + 31d / 4 * sin(14 * t + 3d / 5) + 67d / 11 * sin(15 * t + 7d / 3)
|
|
+ 127d / 21 * sin(17 * t + 17d / 4) + 95d / 8 * sin(18 * t + 7d / 8)
|
|
+ 32d / 11 * sin(21 * t + 8d / 3) + 81d / 10 * sin(23 * t + 45d / 11)
|
|
+ 13d / 3 * sin(24 * t + 13d / 4) + 7d / 4 * sin(28 * t + 3d / 2) + 11d / 5 * sin(31 * t + 5d / 2)
|
|
+ 1d / 3 * sin(32 * t + 12d / 5) + 13d / 4 * sin(33 * t + 22d / 5) + 14d / 3 * sin(34 * t + 9d / 4)
|
|
+ 9d / 5 * sin(35 * t + 8d / 5) + 17d / 9 * sin(36 * t + 22d / 5) + 1d / 3 * sin(37 * t + 15d / 7)
|
|
+ 3d / 2 * sin(38 * t + 39d / 10) + 4d / 3 * sin(39 * t + 7d / 2) + 5d / 3 * sin(40 * t + 17d / 6);
|
|
Func<double, double> y =
|
|
t =>
|
|
-13d / 7 * sin(1d / 2 - 40 * t) - 31d / 8 * sin(1d / 11 - 34 * t) - 12d / 5 * sin(1d / 4 - 31 * t)
|
|
- 9d / 4 * sin(4d / 3 - 29 * t) - 5d / 3 * sin(4d / 3 - 28 * t) - 11d / 2 * sin(6d / 5 - 26 * t)
|
|
- 17d / 7 * sin(3d / 2 - 25 * t) - 5d / 2 * sin(1 - 24 * t) - 39d / 7 * sin(1 - 19 * t)
|
|
- 59d / 5 * sin(2d / 3 - 18 * t) - 179d / 9 * sin(13d / 12 - 12 * t)
|
|
- 103d / 2 * sin(1d / 10 - 9 * t) - 356d / 5 * sin(1 - 5 * t) - 429d / 2 * sin(20d / 19 - t)
|
|
+ 288d / 5 * sin(2 * t + 10d / 3) + 53d / 6 * sin(3 * t + 5d / 2) + 351d / 7 * sin(4 * t + 5d / 2)
|
|
+ 201d / 4 * sin(6 * t + 17d / 7) + 167d / 3 * sin(7 * t + 19d / 5) + 323d / 5 * sin(8 * t + 1d / 4)
|
|
+ 153d / 7 * sin(10 * t + 2d / 3) + 71d / 5 * sin(11 * t + 6d / 5)
|
|
+ 47d / 12 * sin(13 * t + 11d / 5) + 391d / 26 * sin(14 * t + 2) + 164d / 11 * sin(15 * t + 1d / 7)
|
|
+ 11d / 2 * sin(16 * t + 2d / 3) + 31d / 3 * sin(17 * t + 1d / 7) + 54d / 11 * sin(20 * t + 1d / 4)
|
|
+ 43d / 5 * sin(21 * t + 13d / 3) + 13d / 5 * sin(22 * t + 3d / 2) + 17d / 5 * sin(23 * t + 11d / 5)
|
|
+ 19d / 10 * sin(27 * t + 4) + 15d / 2 * sin(30 * t + 55d / 18) + 4d / 3 * sin(32 * t + 3d / 5)
|
|
+ 5d / 3 * sin(33 * t + 4) + 27d / 7 * sin(35 * t + 13d / 6) + 1d / 4 * sin(36 * t + 43d / 11)
|
|
+ 16d / 5 * sin(37 * t + 9d / 2) + 20d / 19 * sin(38 * t + 23d / 6) + 8d / 3 * sin(39 * t + 4d / 7);
|
|
|
|
var model = new PlotModel { Title = "Elephant curve", PlotType = PlotType.Cartesian };
|
|
model.Series.Add(new FunctionSeries(x, y, 0, Math.PI * 2, 1000));
|
|
return model;
|
|
}
|
|
|
|
[Example("PI curve")]
|
|
public static PlotModel PiCurve()
|
|
{
|
|
// http://www.wolframalpha.com/input/?i=pi+curve
|
|
Func<double, double> sin = Math.Sin;
|
|
Func<double, double> x =
|
|
t => 17d / 31 * sin(235d / 57 - 32 * t) + 19d / 17 * sin(192d / 55 - 30 * t) + 47d / 32 * sin(69d / 25 - 29 * t) + 35d / 26 * sin(75d / 34 - 27 * t) + 6d / 31 * sin(23d / 10 - 26 * t) + 35d / 43 * sin(10d / 33 - 25 * t) + 126d / 43 * sin(421d / 158 - 24 * t) + 143d / 57 * sin(35d / 22 - 22 * t) + 106d / 27 * sin(84d / 29 - 21 * t) + 88d / 25 * sin(23d / 27 - 20 * t) + 74d / 27 * sin(53d / 22 - 19 * t) + 44d / 53 * sin(117d / 25 - 18 * t) + 126d / 25 * sin(88d / 49 - 17 * t) + 79d / 11 * sin(43d / 26 - 16 * t) + 43d / 12 * sin(41d / 17 - 15 * t) + 47d / 27 * sin(244d / 81 - 14 * t) + 8d / 5 * sin(79d / 19 - 13 * t) + 373d / 46 * sin(109d / 38 - 12 * t) + 1200d / 31 * sin(133d / 74 - 11 * t) + 67d / 24 * sin(157d / 61 - 10 * t) + 583d / 28 * sin(13d / 8 - 8 * t) + 772d / 35 * sin(59d / 16 - 7 * t) + 3705d / 46 * sin(117d / 50 - 6 * t) + 862d / 13 * sin(19d / 8 - 5 * t) + 6555d / 34 * sin(157d / 78 - 3 * t) + 6949d / 13 * sin(83d / 27 - t) - 6805d / 54 * sin(2 * t + 1d / 145) - 5207d / 37 * sin(4 * t + 49d / 74) - 1811d / 58 * sin(9 * t + 55d / 43) - 63d / 20 * sin(23 * t + 2d / 23) - 266d / 177 * sin(28 * t + 13d / 18) - 2d / 21 * sin(31 * t + 7d / 16);
|
|
Func<double, double> y =
|
|
t => 70d / 37 * sin(65d / 32 - 32 * t) + 11d / 12 * sin(98d / 41 - 31 * t) + 26d / 29 * sin(35d / 12 - 30 * t) + 54d / 41 * sin(18d / 7 - 29 * t) + 177d / 71 * sin(51d / 19 - 27 * t) + 59d / 34 * sin(125d / 33 - 26 * t) + 49d / 29 * sin(18d / 11 - 25 * t) + 151d / 75 * sin(59d / 22 - 24 * t) + 52d / 9 * sin(118d / 45 - 22 * t) + 52d / 33 * sin(133d / 52 - 21 * t) + 37d / 45 * sin(61d / 14 - 20 * t) + 143d / 46 * sin(144d / 41 - 19 * t) + 254d / 47 * sin(19d / 52 - 18 * t) + 246d / 35 * sin(92d / 25 - 17 * t) + 722d / 111 * sin(176d / 67 - 16 * t) + 136d / 23 * sin(3d / 19 - 15 * t) + 273d / 25 * sin(32d / 21 - 13 * t) + 229d / 33 * sin(117d / 28 - 12 * t) + 19d / 4 * sin(43d / 11 - 11 * t) + 135d / 8 * sin(23d / 10 - 10 * t) + 205d / 6 * sin(33d / 23 - 8 * t) + 679d / 45 * sin(55d / 12 - 7 * t) + 101d / 8 * sin(11d / 12 - 6 * t) + 2760d / 59 * sin(40d / 11 - 5 * t) + 1207d / 18 * sin(21d / 23 - 4 * t) + 8566d / 27 * sin(39d / 28 - 3 * t) + 12334d / 29 * sin(47d / 37 - 2 * t) + 15410d / 39 * sin(185d / 41 - t) - 596d / 17 * sin(9 * t + 3d / 26) - 247d / 28 * sin(14 * t + 25d / 21) - 458d / 131 * sin(23 * t + 21d / 37) - 41d / 36 * sin(28 * t + 7d / 8);
|
|
|
|
var model = new PlotModel { Title = "PI curve", PlotType = PlotType.Cartesian };
|
|
model.Series.Add(new FunctionSeries(x, y, 0, Math.PI * 2, 1000));
|
|
return model;
|
|
}
|
|
|
|
[Example("Angelina Jolie curve")]
|
|
public static PlotModel AngelinaJolieCurve()
|
|
{
|
|
// http://www.wolframalpha.com/input/?i=Angelina+Jolie+curve
|
|
|
|
// Heaviside step function
|
|
Func<double, double> theta = x => x < 0 ? 0 : 1;
|
|
|
|
Func<double, double> sin = Math.Sin;
|
|
double pi = Math.PI;
|
|
Func<double, double> xt =
|
|
t =>
|
|
((-23d / 4 * sin(29d / 20 - 41 * t) - 47d / 15 * sin(47d / 34 - 38 * t)
|
|
- 979d / 196 * sin(45d / 31 - 36 * t) - 59d / 6 * sin(25d / 17 - 33 * t)
|
|
- 259d / 26 * sin(104d / 69 - 32 * t) - 49d / 24 * sin(57d / 37 - 31 * t)
|
|
- 37d / 21 * sin(32d / 23 - 30 * t) - 324d / 31 * sin(85d / 57 - 27 * t)
|
|
- 47d / 26 * sin(24d / 17 - 25 * t) - 247d / 29 * sin(39d / 25 - 24 * t)
|
|
- 834d / 71 * sin(63d / 41 - 23 * t) - 475d / 49 * sin(62d / 41 - 22 * t)
|
|
- 20d / 7 * sin(29d / 20 - 17 * t) - 1286d / 61 * sin(98d / 65 - 16 * t)
|
|
- 2312d / 25 * sin(20d / 13 - 14 * t) - 2662d / 41 * sin(23d / 15 - 13 * t)
|
|
- 2292d / 131 * sin(92d / 61 - 11 * t) - 1690d / 37 * sin(48d / 31 - 8 * t)
|
|
+ 993d / 23 * sin(t + 52d / 33) + 407d / 31 * sin(2 * t + 25d / 16)
|
|
+ 1049d / 57 * sin(3 * t + 49d / 31) + 1385d / 42 * sin(4 * t + 80d / 17)
|
|
+ 2929d / 40 * sin(5 * t + 49d / 31) + 500d / 39 * sin(6 * t + 164d / 35)
|
|
+ 116d / 25 * sin(7 * t + 155d / 33) + 2593d / 26 * sin(9 * t + 43d / 27)
|
|
+ 200d / 37 * sin(10 * t + 65d / 42) + 2866d / 39 * sin(12 * t + 133d / 83)
|
|
+ 703d / 234 * sin(15 * t + 46d / 27) + 133d / 8 * sin(18 * t + 13d / 8)
|
|
+ 716d / 33 * sin(19 * t + 27d / 17) + 180d / 53 * sin(20 * t + 47d / 30)
|
|
+ 476d / 31 * sin(21 * t + 57d / 35) + 73d / 22 * sin(26 * t + 77d / 48)
|
|
+ 549d / 49 * sin(28 * t + 44d / 27) + 657d / 68 * sin(29 * t + 27d / 17)
|
|
+ 29d / 22 * sin(34 * t + 140d / 31) + 180d / 49 * sin(35 * t + 14d / 9)
|
|
+ 43d / 4 * sin(37 * t + 77d / 46) + 68d / 23 * sin(39 * t + 39d / 25)
|
|
+ 80d / 47 * sin(40 * t + 49d / 27) + 16829d / 29) * theta(119 * pi - t)
|
|
* theta(t - 115 * pi)
|
|
+ (-43d / 40 * sin(39d / 29 - 62 * t) - 44d / 17 * sin(56d / 37 - 58 * t)
|
|
- 23d / 39 * sin(14d / 11 - 57 * t) - 59d / 10 * sin(49d / 32 - 51 * t)
|
|
- 215d / 31 * sin(20d / 13 - 46 * t) - 447d / 22 * sin(110d / 73 - 34 * t)
|
|
- 407d / 39 * sin(54d / 35 - 33 * t) - 432d / 35 * sin(14d / 9 - 29 * t)
|
|
- 175d / 33 * sin(35d / 24 - 28 * t) - 102d / 5 * sin(64d / 41 - 22 * t)
|
|
+ 833d / 46 * sin(t + 131d / 28) + 1360d / 9 * sin(2 * t + 52d / 33)
|
|
+ 139d / 3 * sin(3 * t + 43d / 27) + 108d / 29 * sin(4 * t + 244d / 53)
|
|
+ 4269d / 41 * sin(5 * t + 113d / 24) + 7407d / 31 * sin(6 * t + 65d / 41)
|
|
+ 2159d / 32 * sin(7 * t + 103d / 22) + 5476d / 51 * sin(8 * t + 37d / 23)
|
|
+ 3855d / 37 * sin(9 * t + 60d / 37) + 2247d / 46 * sin(10 * t + 18d / 11)
|
|
+ 216d / 31 * sin(11 * t + 81d / 40) + 3364d / 35 * sin(12 * t + 69d / 43)
|
|
+ 1492d / 21 * sin(13 * t + 47d / 10) + 1981d / 29 * sin(14 * t + 21d / 13)
|
|
+ 1852d / 35 * sin(15 * t + 18d / 11) + 255d / 23 * sin(16 * t + 72d / 41)
|
|
+ 499d / 25 * sin(17 * t + 134d / 29) + 754d / 17 * sin(18 * t + 57d / 35)
|
|
+ 203d / 31 * sin(19 * t + 35d / 19) + 1289d / 32 * sin(20 * t + 41d / 25)
|
|
+ 65d / 21 * sin(21 * t + 55d / 13) + 731d / 31 * sin(23 * t + 34d / 21)
|
|
+ 816d / 83 * sin(24 * t + 23d / 14) + 467d / 29 * sin(25 * t + 197d / 42)
|
|
+ 496d / 37 * sin(26 * t + 64d / 39) + 34d / 9 * sin(27 * t + 40d / 27)
|
|
+ 204d / 23 * sin(30 * t + 76d / 43) + 34d / 3 * sin(31 * t + 50d / 29)
|
|
+ 1579d / 57 * sin(32 * t + 51d / 31) + 37d / 6 * sin(35 * t + 69d / 44)
|
|
+ 128d / 21 * sin(36 * t + 21d / 13) + 194d / 83 * sin(37 * t + 52d / 27)
|
|
+ 35d / 37 * sin(38 * t + 46d / 19) + 39d / 38 * sin(39 * t + 234d / 55)
|
|
+ 113d / 16 * sin(40 * t + 71d / 43) + 126d / 101 * sin(41 * t + 145d / 83)
|
|
+ 13d / 6 * sin(42 * t + 184d / 41) + 100d / 31 * sin(43 * t + 117d / 25)
|
|
+ 355d / 36 * sin(44 * t + 48d / 29) + 148d / 57 * sin(45 * t + 30d / 17)
|
|
+ 3d / 2 * sin(47 * t + 51d / 28) + 107d / 61 * sin(48 * t + 27d / 16)
|
|
+ 72d / 13 * sin(49 * t + 93d / 56) + 55d / 37 * sin(50 * t + 144d / 31)
|
|
+ 53d / 24 * sin(52 * t + 59d / 34) + 182d / 47 * sin(53 * t + 41d / 24)
|
|
+ 481d / 103 * sin(54 * t + 110d / 61) + 97d / 29 * sin(55 * t + 89d / 19)
|
|
+ 7d / 4 * sin(56 * t + 49d / 30) + 82d / 37 * sin(59 * t + 55d / 28)
|
|
+ 20d / 13 * sin(60 * t + 45d / 23) + 147d / 34 * sin(61 * t + 77d / 45) - 27563d / 35)
|
|
* theta(115 * pi - t) * theta(t - 111 * pi)
|
|
+ (-11d / 13 * sin(37d / 33 - 98 * t) - 13d / 32 * sin(69d / 44 - 97 * t)
|
|
- 33d / 19 * sin(38d / 29 - 88 * t) - 124d / 45 * sin(44d / 29 - 87 * t)
|
|
- 72d / 37 * sin(56d / 43 - 77 * t) - 78d / 77 * sin(197d / 131 - 72 * t)
|
|
- 39d / 58 * sin(7d / 33 - 54 * t) - 31d / 20 * sin(26d / 25 - 37 * t)
|
|
- 265d / 58 * sin(122d / 81 - 35 * t) - 4901d / 196 * sin(49d / 32 - 12 * t)
|
|
- 7950d / 49 * sin(91d / 58 - 8 * t) - 515d / 12 * sin(25d / 16 - 5 * t)
|
|
+ 21289d / 23 * sin(t + 80d / 51) + 4245d / 8 * sin(2 * t + 36d / 23)
|
|
+ 394321d / 930 * sin(3 * t + 113d / 24) + 4699d / 17 * sin(4 * t + 113d / 24)
|
|
+ 1931d / 41 * sin(6 * t + 43d / 28) + 745d / 24 * sin(7 * t + 40d / 27)
|
|
+ 861d / 8 * sin(9 * t + 113d / 24) + 1348d / 15 * sin(10 * t + 146d / 31)
|
|
+ 1015d / 39 * sin(11 * t + 43d / 28) + 590d / 39 * sin(13 * t + 53d / 34)
|
|
+ 271d / 37 * sin(14 * t + 48d / 31) + 268d / 29 * sin(15 * t + 63d / 38)
|
|
+ 443d / 25 * sin(16 * t + 127d / 27) + 872d / 37 * sin(17 * t + 53d / 35)
|
|
+ 2329d / 82 * sin(18 * t + 145d / 31) + 11d / 4 * sin(19 * t + 832d / 185)
|
|
+ 1139d / 36 * sin(20 * t + 49d / 32) + 203d / 13 * sin(21 * t + 114d / 25)
|
|
+ 2807d / 72 * sin(22 * t + 48d / 31) + 639d / 26 * sin(23 * t + 19d / 12)
|
|
+ 163d / 23 * sin(24 * t + 43d / 26) + 517d / 36 * sin(25 * t + 75d / 47)
|
|
+ 359d / 30 * sin(26 * t + 159d / 34) + 603d / 32 * sin(27 * t + 46d / 31)
|
|
+ 1679d / 34 * sin(28 * t + 387d / 83) + 269d / 22 * sin(29 * t + 41d / 28)
|
|
+ 94d / 39 * sin(30 * t + 56d / 51) + 1219d / 54 * sin(31 * t + 51d / 11)
|
|
+ 535d / 29 * sin(32 * t + 61d / 41) + 17d / 52 * sin(33 * t + 54d / 49)
|
|
+ 133d / 33 * sin(34 * t + 308d / 67) + 73d / 18 * sin(36 * t + 262d / 57)
|
|
+ 131d / 20 * sin(38 * t + 134d / 29) + 391d / 72 * sin(39 * t + 428d / 93)
|
|
+ 505d / 26 * sin(40 * t + 3d / 2) + 39d / 10 * sin(41 * t + 256d / 57)
|
|
+ 76d / 21 * sin(42 * t + 22d / 13) + 341d / 37 * sin(43 * t + 16d / 11)
|
|
+ 67d / 39 * sin(44 * t + 93d / 22) + 211d / 26 * sin(45 * t + 167d / 36)
|
|
+ 161d / 20 * sin(46 * t + 19d / 13) + 175d / 23 * sin(47 * t + 124d / 27)
|
|
+ 229d / 35 * sin(48 * t + 59d / 39) + 23d / 19 * sin(49 * t + 36d / 23)
|
|
+ 59d / 34 * sin(50 * t + 40d / 9) + 399d / 46 * sin(51 * t + 75d / 52)
|
|
+ 351d / 49 * sin(52 * t + 119d / 26) + 23d / 17 * sin(53 * t + 49d / 44)
|
|
+ 179d / 17 * sin(55 * t + 308d / 67) + 74d / 25 * sin(56 * t + 84d / 61)
|
|
+ 7d / 10 * sin(57 * t + 21d / 17) + 58d / 39 * sin(58 * t + 94d / 21)
|
|
+ 44d / 23 * sin(59 * t + 97d / 54) + 265d / 36 * sin(60 * t + 47d / 32)
|
|
+ 44d / 87 * sin(61 * t + 49d / 26) + 899d / 142 * sin(62 * t + 143d / 31)
|
|
+ 109d / 29 * sin(63 * t + 93d / 70) + 391d / 55 * sin(64 * t + 51d / 11)
|
|
+ 24d / 37 * sin(65 * t + 29d / 38) + 151d / 30 * sin(66 * t + 78d / 17)
|
|
+ 291d / 50 * sin(67 * t + 44d / 29) + 124d / 29 * sin(68 * t + 82d / 55)
|
|
+ 83d / 52 * sin(69 * t + 95d / 47) + 22d / 21 * sin(70 * t + 81d / 38)
|
|
+ 301d / 47 * sin(71 * t + 13d / 9) + 341d / 28 * sin(73 * t + 239d / 52)
|
|
+ 133d / 22 * sin(74 * t + 14d / 11) + 245d / 39 * sin(75 * t + 47d / 10)
|
|
+ 136d / 29 * sin(76 * t + 537d / 115) + 250d / 43 * sin(78 * t + 25d / 17)
|
|
+ 30d / 41 * sin(79 * t + 83d / 23) + 5d / 2 * sin(80 * t + 198d / 113)
|
|
+ 129d / 29 * sin(81 * t + 21d / 13) + 169d / 32 * sin(82 * t + 73d / 47)
|
|
+ 28d / 29 * sin(83 * t + 133d / 33) + 129d / 40 * sin(84 * t + 86d / 19)
|
|
+ 34d / 11 * sin(85 * t + 56d / 43) + 143d / 32 * sin(86 * t + 163d / 35)
|
|
+ 77d / 25 * sin(89 * t + 27d / 20) + 418d / 93 * sin(90 * t + 166d / 37)
|
|
+ 103d / 37 * sin(91 * t + 55d / 39) + 16d / 13 * sin(92 * t + 45d / 26)
|
|
+ 87d / 40 * sin(93 * t + 55d / 32) + 53d / 25 * sin(94 * t + 67d / 41)
|
|
+ 58d / 43 * sin(95 * t + 26d / 15) + 67d / 30 * sin(96 * t + 149d / 99)
|
|
+ 155d / 41 * sin(99 * t + 124d / 27) - 6637d / 21) * theta(111 * pi - t)
|
|
* theta(t - 107 * pi)
|
|
+ (-27d / 23 * sin(5d / 12 - 35 * t) - 94d / 23 * sin(32d / 31 - 34 * t)
|
|
- 26d / 9 * sin(17d / 27 - 33 * t) - 226d / 31 * sin(43d / 33 - 32 * t)
|
|
- 211d / 50 * sin(38d / 25 - 29 * t) - 11d / 18 * sin(18d / 23 - 28 * t)
|
|
- 23d / 18 * sin(32d / 31 - 27 * t) - 255d / 94 * sin(27d / 20 - 25 * t)
|
|
- 41d / 31 * sin(65d / 47 - 21 * t) - 59d / 12 * sin(33d / 28 - 19 * t)
|
|
- 160d / 31 * sin(31d / 29 - 18 * t) - 859d / 78 * sin(165d / 124 - 17 * t)
|
|
- 137d / 13 * sin(37d / 26 - 16 * t) - 25d / 23 * sin(175d / 117 - 9 * t)
|
|
+ 937d / 6 * sin(t + 41d / 26) + 41d / 9 * sin(2 * t + 163d / 36)
|
|
+ 563d / 33 * sin(3 * t + 21d / 13) + 19d / 8 * sin(4 * t + 181d / 40)
|
|
+ 53d / 15 * sin(5 * t + 77d / 46) + 10d / 31 * sin(6 * t + 73d / 23)
|
|
+ 133d / 39 * sin(7 * t + 67d / 42) + 5d / 9 * sin(8 * t + 30d / 19)
|
|
+ 22d / 13 * sin(10 * t + 47d / 27) + 108d / 37 * sin(11 * t + 90d / 53)
|
|
+ 37d / 40 * sin(12 * t + 47d / 23) + 18d / 13 * sin(13 * t + 49d / 11)
|
|
+ 63d / 40 * sin(14 * t + 139d / 31) + 453d / 34 * sin(15 * t + 65d / 41)
|
|
+ 27d / 32 * sin(20 * t + 13d / 46) + 8d / 19 * sin(22 * t + 58d / 35)
|
|
+ 19d / 30 * sin(23 * t + 157d / 34) + 10d / 23 * sin(24 * t + 7d / 27)
|
|
+ 51d / 31 * sin(26 * t + 29d / 24) + 83d / 26 * sin(30 * t + 52d / 31)
|
|
+ 179d / 45 * sin(31 * t + 56d / 37) + 14d / 23 * sin(36 * t + 45d / 29)
|
|
+ 56d / 33 * sin(37 * t + 69d / 37) + 62d / 61 * sin(38 * t + 192d / 47)
|
|
+ 4d / 5 * sin(39 * t + 102d / 47) + 7d / 43 * sin(40 * t + 67d / 18)
|
|
+ 3d / 13 * sin(41 * t + 39d / 38) + 15d / 32 * sin(42 * t + 75d / 16)
|
|
+ 34d / 31 * sin(43 * t + 53d / 29) + 31d / 32 * sin(44 * t + 52d / 25)
|
|
+ 11d / 29 * sin(45 * t + 23d / 6) + 19d / 11 * sin(46 * t + 134d / 29)
|
|
+ 55d / 27 * sin(47 * t + 30d / 17) + 8d / 25 * sin(48 * t + 185d / 44)
|
|
+ 12d / 31 * sin(49 * t + 61d / 41) - 803d / 16) * theta(107 * pi - t)
|
|
* theta(t - 103 * pi)
|
|
+ (-183d / 137 * sin(41d / 31 - 53 * t) - 3d / 2 * sin(45d / 32 - 51 * t)
|
|
- 21d / 37 * sin(17d / 24 - 50 * t) - 109d / 73 * sin(21d / 16 - 49 * t)
|
|
- 28d / 23 * sin(26d / 19 - 46 * t) - 499d / 95 * sin(49d / 38 - 44 * t)
|
|
- 79d / 37 * sin(37d / 28 - 41 * t) - 28d / 25 * sin(35d / 33 - 35 * t)
|
|
- 39d / 10 * sin(23d / 17 - 34 * t) - 17d / 6 * sin(27d / 22 - 33 * t)
|
|
- 40d / 29 * sin(4d / 3 - 32 * t) - 159d / 65 * sin(23d / 16 - 30 * t)
|
|
- 130d / 31 * sin(43d / 34 - 29 * t) - 182d / 27 * sin(37d / 26 - 28 * t)
|
|
- 19d / 13 * sin(35d / 23 - 26 * t) - 67d / 39 * sin(58d / 49 - 25 * t)
|
|
- 131d / 37 * sin(81d / 59 - 24 * t) - 29d / 18 * sin(53d / 40 - 23 * t)
|
|
- 77d / 51 * sin(14d / 11 - 22 * t) - 457d / 61 * sin(68d / 47 - 21 * t)
|
|
- 293d / 27 * sin(53d / 36 - 15 * t) - 80d / 39 * sin(23d / 15 - 14 * t)
|
|
- 65d / 17 * sin(31d / 21 - 11 * t) - 21d / 17 * sin(26d / 17 - 10 * t)
|
|
- 41d / 13 * sin(57d / 37 - 8 * t) + 17496d / 85 * sin(t + 41d / 26)
|
|
+ 26d / 17 * sin(2 * t + 418d / 93) + 449d / 24 * sin(3 * t + 27d / 17)
|
|
+ 221d / 63 * sin(4 * t + 51d / 11) + 283d / 43 * sin(5 * t + 69d / 43)
|
|
+ 16d / 15 * sin(6 * t + 64d / 37) + 29d / 11 * sin(7 * t + 59d / 36)
|
|
+ 201d / 44 * sin(9 * t + 59d / 37) + 97d / 83 * sin(12 * t + 35d / 22)
|
|
+ 77d / 10 * sin(13 * t + 173d / 104) + 23d / 22 * sin(16 * t + 61d / 32)
|
|
+ 349d / 32 * sin(17 * t + 61d / 36) + 60d / 17 * sin(18 * t + 79d / 46)
|
|
+ 11d / 23 * sin(19 * t + 61d / 29) + 373d / 86 * sin(20 * t + 48d / 29)
|
|
+ 99d / 16 * sin(27 * t + 67d / 40) + 217d / 38 * sin(31 * t + 46d / 27)
|
|
+ 25d / 29 * sin(36 * t + 189d / 41) + 423d / 106 * sin(37 * t + 49d / 27)
|
|
+ 11d / 12 * sin(38 * t + 59d / 29) + 184d / 105 * sin(39 * t + 65d / 34)
|
|
+ 93d / 50 * sin(40 * t + 93d / 49) + 8d / 25 * sin(42 * t + 45d / 22)
|
|
+ 13d / 11 * sin(43 * t + 46d / 29) + 19d / 28 * sin(45 * t + 27d / 28)
|
|
+ 14d / 23 * sin(47 * t + 37d / 31) + 9d / 31 * sin(48 * t + 25d / 16)
|
|
+ 52d / 31 * sin(52 * t + 56d / 31) - 20749d / 273) * theta(103 * pi - t)
|
|
* theta(t - 99 * pi)
|
|
+ (-2d / 27 * sin(47d / 30 - 3 * t) + 321d / 16 * sin(t + 63d / 40)
|
|
+ 219d / 31 * sin(2 * t + 41d / 26) + 69d / 47 * sin(4 * t + 30d / 19)
|
|
+ 36d / 23 * sin(5 * t + 27d / 17) + 888d / 11) * theta(99 * pi - t)
|
|
* theta(t - 95 * pi)
|
|
+ (-93d / 25 * sin(25d / 16 - 8 * t) - 85d / 33 * sin(25d / 16 - 7 * t)
|
|
- 217d / 38 * sin(47d / 30 - 6 * t) - 989d / 49 * sin(25d / 16 - 5 * t)
|
|
+ 6925d / 39 * sin(t + 11d / 7) + 3173d / 138 * sin(2 * t + 52d / 33)
|
|
+ 289d / 9 * sin(3 * t + 146d / 31) + 187d / 23 * sin(4 * t + 41d / 26)
|
|
+ 16d / 7 * sin(9 * t + 164d / 35) + 19d / 22 * sin(10 * t + 429d / 92)
|
|
+ 4d / 27 * sin(11 * t + 47d / 32) + 23d / 40 * sin(12 * t + 29d / 19) - 1249d / 41)
|
|
* theta(95 * pi - t) * theta(t - 91 * pi)
|
|
+ (-14d / 51 * sin(65d / 43 - 4 * t) + 2519d / 13 * sin(t + 74d / 47)
|
|
+ 14d / 11 * sin(2 * t + 151d / 33) + 601d / 28 * sin(3 * t + 30d / 19) - 5627d / 23)
|
|
* theta(91 * pi - t) * theta(t - 87 * pi)
|
|
+ (-268d / 37 * sin(91d / 58 - t) + 1d / 47 * sin(2 * t + 31d / 22)
|
|
+ 68d / 41 * sin(3 * t + 113d / 24) + 185d / 19 * sin(4 * t + 52d / 33)
|
|
+ 133d / 53 * sin(5 * t + 65d / 41) + 3d / 35 * sin(6 * t + 122d / 65) - 14306d / 33)
|
|
* theta(87 * pi - t) * theta(t - 83 * pi)
|
|
+ (-64d / 15 * sin(66d / 43 - 12 * t) - 244d / 63 * sin(38d / 25 - 10 * t)
|
|
- 6d / 5 * sin(17d / 12 - 9 * t) - 632d / 39 * sin(20d / 13 - 8 * t)
|
|
- 986d / 33 * sin(20d / 13 - 7 * t) - 123d / 23 * sin(31d / 20 - 6 * t)
|
|
- 923d / 32 * sin(36d / 23 - 4 * t) + 1270d / 19 * sin(t + 74d / 47)
|
|
+ 70d / 19 * sin(2 * t + 53d / 32) + 1359d / 43 * sin(3 * t + 41d / 26)
|
|
+ 854d / 27 * sin(5 * t + 30d / 19) + 32d / 13 * sin(11 * t + 19d / 12) + 15881d / 49)
|
|
* theta(83 * pi - t) * theta(t - 79 * pi)
|
|
+ (-1009d / 28 * sin(36d / 23 - 6 * t) + 1362d / 19 * sin(t + 11d / 7)
|
|
+ 113d / 11 * sin(2 * t + 174d / 37) + 2128d / 45 * sin(3 * t + 30d / 19)
|
|
+ 3805d / 58 * sin(4 * t + 30d / 19) + 1316d / 51 * sin(5 * t + 41d / 26)
|
|
+ 500d / 33 * sin(7 * t + 85d / 54) + 69d / 8 * sin(8 * t + 179d / 38)
|
|
+ 337d / 37 * sin(9 * t + 19d / 12) + 59d / 18 * sin(10 * t + 53d / 33)
|
|
+ 5d / 24 * sin(11 * t + 87d / 46) + 335d / 44 * sin(12 * t + 46d / 29) - 9149d / 24)
|
|
* theta(79 * pi - t) * theta(t - 75 * pi)
|
|
+ (-3d / 32 * sin(37d / 27 - 14 * t) - 31d / 25 * sin(54d / 35 - 11 * t)
|
|
- 101d / 51 * sin(39d / 25 - 6 * t) + 4553d / 33 * sin(t + 63d / 40)
|
|
+ 771d / 43 * sin(2 * t + 65d / 41) + 679d / 45 * sin(3 * t + 49d / 31)
|
|
+ 79d / 19 * sin(4 * t + 65d / 41) + 468d / 67 * sin(5 * t + 68d / 43)
|
|
+ 127d / 52 * sin(7 * t + 59d / 37) + 30d / 29 * sin(8 * t + 155d / 33)
|
|
+ 89d / 49 * sin(9 * t + 35d / 22) + 50d / 99 * sin(10 * t + 19d / 12)
|
|
+ 35d / 52 * sin(12 * t + 49d / 30) + 80d / 39 * sin(13 * t + 21d / 13)
|
|
+ 25d / 23 * sin(15 * t + 34d / 21) + 13d / 38 * sin(16 * t + 96d / 61)
|
|
+ 17d / 31 * sin(17 * t + 17d / 10) + 55d / 39 * sin(18 * t + 61d / 38)
|
|
+ 17d / 32 * sin(19 * t + 179d / 38) + 16d / 13 * sin(20 * t + 55d / 34) + 10772d / 39)
|
|
* theta(75 * pi - t) * theta(t - 71 * pi)
|
|
+ (-sin(54d / 35 - 16 * t) - 17d / 29 * sin(86d / 57 - 12 * t)
|
|
- 43d / 19 * sin(47d / 30 - 2 * t) + 4197d / 25 * sin(t + 11d / 7)
|
|
+ 904d / 39 * sin(3 * t + 36d / 23) + 6d / 11 * sin(4 * t + 127d / 27)
|
|
+ 209d / 31 * sin(5 * t + 85d / 54) + 12d / 61 * sin(6 * t + 41d / 34)
|
|
+ 143d / 46 * sin(7 * t + 14d / 9) + 28d / 29 * sin(8 * t + 30d / 19)
|
|
+ 63d / 32 * sin(9 * t + 36d / 23) + 17d / 43 * sin(10 * t + 149d / 32)
|
|
+ 29d / 19 * sin(11 * t + 25d / 16) + 5d / 8 * sin(13 * t + 36d / 23)
|
|
+ 21d / 17 * sin(14 * t + 61d / 39) + 28d / 57 * sin(15 * t + 39d / 25)
|
|
+ 19d / 31 * sin(17 * t + 49d / 31) + 25d / 42 * sin(18 * t + 127d / 27)
|
|
+ 17d / 25 * sin(19 * t + 74d / 47) + 5d / 19 * sin(20 * t + 32d / 21)
|
|
+ 62d / 55 * sin(21 * t + 47d / 30) - 14987d / 44) * theta(71 * pi - t)
|
|
* theta(t - 67 * pi)
|
|
+ (-82d / 31 * sin(35d / 23 - 23 * t) - 165d / 82 * sin(31d / 20 - 22 * t)
|
|
- 109d / 20 * sin(36d / 23 - 12 * t) - 74d / 11 * sin(14d / 9 - 11 * t)
|
|
- 12d / 29 * sin(89d / 59 - 10 * t) - 8d / 17 * sin(19d / 13 - 7 * t)
|
|
- 211d / 35 * sin(14d / 9 - 6 * t) - 59d / 23 * sin(25d / 16 - 5 * t)
|
|
- 148d / 13 * sin(80d / 51 - 4 * t) - 465d / 13 * sin(36d / 23 - 2 * t)
|
|
+ 2488d / 25 * sin(t + 11d / 7) + 95d / 26 * sin(3 * t + 49d / 31)
|
|
+ 12d / 29 * sin(8 * t + 69d / 44) + 197d / 58 * sin(9 * t + 49d / 31)
|
|
+ 26d / 33 * sin(13 * t + 79d / 17) + 67d / 9 * sin(14 * t + 62d / 39)
|
|
+ 400d / 37 * sin(15 * t + 35d / 22) + 355d / 43 * sin(16 * t + 59d / 37)
|
|
+ 19d / 20 * sin(17 * t + 70d / 43) + 5d / 16 * sin(18 * t + 55d / 32)
|
|
+ 31d / 18 * sin(19 * t + 34d / 21) + 26d / 19 * sin(20 * t + 76d / 47)
|
|
+ 6d / 19 * sin(21 * t + 119d / 26) + 6093d / 19) * theta(67 * pi - t)
|
|
* theta(t - 63 * pi)
|
|
+ (-73d / 52 * sin(54d / 35 - 23 * t) - 54d / 25 * sin(58d / 37 - 19 * t)
|
|
- 73d / 20 * sin(14d / 9 - 17 * t) - 5d / 33 * sin(43d / 28 - 14 * t)
|
|
- 52d / 21 * sin(25d / 16 - 12 * t) + 4675d / 43 * sin(t + 96d / 61)
|
|
+ 353d / 28 * sin(2 * t + 30d / 19) + 3799d / 200 * sin(3 * t + 41d / 26)
|
|
+ 28d / 5 * sin(4 * t + 41d / 26) + 200d / 31 * sin(5 * t + 11d / 7)
|
|
+ 41d / 28 * sin(6 * t + 41d / 26) + 21d / 29 * sin(7 * t + 31d / 20)
|
|
+ 95d / 46 * sin(8 * t + 99d / 62) + 49d / 99 * sin(9 * t + 74d / 47)
|
|
+ 17d / 22 * sin(10 * t + 211d / 45) + 77d / 34 * sin(11 * t + 27d / 17)
|
|
+ 40d / 17 * sin(13 * t + 155d / 97) + 20d / 27 * sin(15 * t + 43d / 26)
|
|
+ 47d / 16 * sin(16 * t + 59d / 37) + 149d / 37 * sin(18 * t + 43d / 27)
|
|
+ 30d / 17 * sin(20 * t + 8d / 5) + 3d / 31 * sin(21 * t + 92d / 41)
|
|
+ 16d / 23 * sin(22 * t + 45d / 29) + 28d / 39 * sin(24 * t + 17d / 11) - 9671d / 24)
|
|
* theta(63 * pi - t) * theta(t - 59 * pi)
|
|
+ (-278d / 19 * sin(47d / 30 - 3 * t) - 181d / 29 * sin(58d / 37 - 2 * t)
|
|
- 2421d / 26 * sin(69d / 44 - t) + 9898d / 27) * theta(59 * pi - t)
|
|
* theta(t - 55 * pi)
|
|
+ (7671d / 67 * sin(t + 107d / 68) + 355d / 36 * sin(2 * t + 11d / 7)
|
|
+ 377d / 24 * sin(3 * t + 49d / 31) - 28766d / 63) * theta(55 * pi - t)
|
|
* theta(t - 51 * pi)
|
|
+ (-1345d / 28 * sin(80d / 51 - 2 * t) - 359d / 25 * sin(113d / 72 - t)
|
|
+ 259d / 15 * sin(3 * t + 11d / 7) + 5273d / 19) * theta(51 * pi - t)
|
|
* theta(t - 47 * pi)
|
|
+ (-10399d / 100 * sin(91d / 58 - t) + 1514d / 33 * sin(2 * t + 85d / 54) - 24712d / 67)
|
|
* theta(47 * pi - t) * theta(t - 43 * pi)
|
|
+ (-14d / 37 * sin(13d / 11 - 10 * t) + 300d / 41 * sin(t + 77d / 36)
|
|
+ 102d / 23 * sin(2 * t + 73d / 110) + 259d / 30 * sin(3 * t + 11d / 4)
|
|
+ 323d / 63 * sin(4 * t + 87d / 28) + 150d / 41 * sin(5 * t + 18d / 25)
|
|
+ 26d / 37 * sin(6 * t + 69d / 19) + 16d / 35 * sin(7 * t + 19d / 25)
|
|
+ 18d / 25 * sin(8 * t + 17d / 4) + 11d / 19 * sin(9 * t + 79d / 28)
|
|
+ 5d / 19 * sin(11 * t + 19d / 10) + 13d / 31 * sin(12 * t + 95d / 21) + 8431d / 36)
|
|
* theta(43 * pi - t) * theta(t - 39 * pi)
|
|
+ (-3d / 13 * sin(5d / 4 - 12 * t) - 21d / 29 * sin(59d / 38 - 6 * t)
|
|
- 70d / 11 * sin(26d / 19 - t) + 76d / 11 * sin(2 * t + 19d / 14)
|
|
+ 162d / 29 * sin(3 * t + 203d / 45) + 439d / 73 * sin(4 * t + 124d / 27)
|
|
+ 14d / 33 * sin(5 * t + 38d / 29) + 34d / 33 * sin(7 * t + 24d / 11)
|
|
+ 39d / 46 * sin(8 * t + 94d / 21) + 11d / 40 * sin(9 * t + 13d / 15)
|
|
+ 9d / 19 * sin(10 * t + 229d / 51) + 4d / 35 * sin(11 * t + 22d / 7) - 2147d / 6)
|
|
* theta(39 * pi - t) * theta(t - 35 * pi)
|
|
+ (769d / 16 * sin(t + 20d / 17) + 49d / 31 * sin(2 * t + 84d / 23)
|
|
+ 129d / 41 * sin(3 * t + 13d / 37) + 11433d / 47) * theta(35 * pi - t)
|
|
* theta(t - 31 * pi)
|
|
+ (-14d / 17 * sin(22d / 23 - 4 * t) - 21d / 25 * sin(37d / 56 - 2 * t)
|
|
+ 1493d / 31 * sin(t + 48d / 37) + 49d / 27 * sin(3 * t + 5d / 17) - 8077d / 23)
|
|
* theta(31 * pi - t) * theta(t - 27 * pi)
|
|
+ (2099d / 23 * sin(t + 112d / 67) + 25d / 32 * sin(2 * t + 68d / 23)
|
|
+ 129d / 16 * sin(3 * t + 50d / 27) + 31d / 34 * sin(4 * t + 373d / 112)
|
|
+ 38d / 17 * sin(5 * t + 21d / 11) + 38d / 53 * sin(6 * t + 32d / 9)
|
|
+ 25d / 28 * sin(7 * t + 83d / 46) + 10d / 19 * sin(8 * t + 134d / 35) + 10721d / 42)
|
|
* theta(27 * pi - t) * theta(t - 23 * pi)
|
|
+ (3072d / 29 * sin(t + 29d / 19) + 9d / 8 * sin(2 * t + 256d / 73)
|
|
+ 254d / 25 * sin(3 * t + 43d / 28) + 19d / 21 * sin(4 * t + 87d / 25)
|
|
+ 95d / 26 * sin(5 * t + 81d / 52) + 21d / 32 * sin(6 * t + 23d / 6)
|
|
+ 86d / 53 * sin(7 * t + 45d / 29) + 23d / 38 * sin(8 * t + 243d / 67) - 3827d / 11)
|
|
* theta(23 * pi - t) * theta(t - 19 * pi)
|
|
+ (-25d / 17 * sin(36d / 25 - 6 * t) - 99d / 46 * sin(18d / 29 - 4 * t)
|
|
+ 3796d / 29 * sin(t + 43d / 31) + 5d / 2 * sin(2 * t + 5d / 28)
|
|
+ 227d / 35 * sin(3 * t + 26d / 21) + 47d / 20 * sin(5 * t + 43d / 39)
|
|
+ 23d / 17 * sin(7 * t + 11d / 13) + 4572d / 17) * theta(19 * pi - t)
|
|
* theta(t - 15 * pi)
|
|
+ (6353d / 37 * sin(t + 37d / 21) + 430d / 59 * sin(2 * t + 165d / 37)
|
|
+ 537d / 43 * sin(3 * t + 78d / 31) + 133d / 25 * sin(4 * t + 143d / 32)
|
|
+ 128d / 25 * sin(5 * t + 78d / 23) + 218d / 61 * sin(6 * t + 174d / 37)
|
|
+ 51d / 22 * sin(7 * t + 34d / 9) - 12821d / 38) * theta(15 * pi - t)
|
|
* theta(t - 11 * pi)
|
|
+ (-36d / 23 * sin(13d / 18 - 12 * t) - 77d / 36 * sin(17d / 30 - 10 * t)
|
|
- 82d / 31 * sin(17d / 24 - 8 * t) - 255d / 62 * sin(26d / 37 - 6 * t)
|
|
- 192d / 37 * sin(9d / 16 - 4 * t) - 199d / 40 * sin(21d / 47 - 2 * t)
|
|
+ 5791d / 22 * sin(t + 63d / 41) + 1140d / 47 * sin(3 * t + 34d / 23)
|
|
+ 92d / 13 * sin(5 * t + 29d / 21) + 63d / 22 * sin(7 * t + 19d / 17)
|
|
+ 31d / 28 * sin(9 * t + 21d / 23) + 13d / 19 * sin(11 * t + 54d / 35) - 3874d / 61)
|
|
* theta(11 * pi - t) * theta(t - 7 * pi)
|
|
+ (-186d / 29 * sin(3d / 2 - 6 * t) - 452d / 43 * sin(81d / 65 - 4 * t)
|
|
- 487d / 39 * sin(31d / 34 - 2 * t) + 3854d / 13 * sin(t + 102d / 73)
|
|
+ 313d / 17 * sin(3 * t + 31d / 30) + 56d / 23 * sin(5 * t + 4d / 13)
|
|
+ 46d / 33 * sin(7 * t + 33d / 13) + 110d / 27 * sin(8 * t + 57d / 13)
|
|
+ 67d / 38 * sin(9 * t + 71d / 33) + 138d / 59 * sin(10 * t + 101d / 26)
|
|
+ 11d / 8 * sin(11 * t + 46d / 25) + 20d / 23 * sin(12 * t + 103d / 29) - 605d / 13)
|
|
* theta(7 * pi - t) * theta(t - 3 * pi)
|
|
+ (-320d / 43 * sin(21d / 34 - 6 * t) - 205d / 29 * sin(299d / 298 - 4 * t)
|
|
+ 47179d / 69 * sin(t + 6d / 13) + 307d / 32 * sin(2 * t + 46d / 51)
|
|
+ 1152d / 19 * sin(3 * t + 60d / 37) + 107d / 8 * sin(5 * t + 143d / 37)
|
|
+ 2626d / 175 * sin(7 * t + 45d / 26) + 131d / 22 * sin(8 * t + 143d / 40)
|
|
+ 296d / 47 * sin(9 * t + 500d / 499) + 16d / 7 * sin(10 * t + 93d / 25) - 4117d / 31)
|
|
* theta(3 * pi - t) * theta(t + pi)) * theta(Math.Sqrt(Math.Sign(sin(t / 2))));
|
|
Func<double, double> yt =
|
|
t =>
|
|
((-52d / 5 * sin(54d / 37 - 34 * t) - 179d / 56 * sin(46d / 33 - 31 * t)
|
|
- 513d / 28 * sin(59d / 39 - 25 * t) - 316d / 105 * sin(43d / 28 - 22 * t)
|
|
- 259d / 16 * sin(102d / 65 - 17 * t) - 26239d / 64 * sin(36d / 23 - 3 * t)
|
|
- 18953d / 51 * sin(58d / 37 - t) + 11283d / 29 * sin(2 * t + 30d / 19)
|
|
+ 29123d / 35 * sin(4 * t + 49d / 31) + 6877d / 14 * sin(5 * t + 65d / 41)
|
|
+ 117d / 50 * sin(6 * t + 103d / 51) + 587d / 13 * sin(7 * t + 164d / 35)
|
|
+ 102d / 13 * sin(8 * t + 236d / 51) + 975d / 14 * sin(9 * t + 101d / 63)
|
|
+ 122d / 41 * sin(10 * t + 79d / 44) + 1900d / 139 * sin(11 * t + 117d / 25)
|
|
+ 597d / 22 * sin(12 * t + 31d / 19) + 1219d / 39 * sin(13 * t + 8d / 5)
|
|
+ 552d / 13 * sin(14 * t + 35d / 22) + 621d / 26 * sin(15 * t + 31d / 19)
|
|
+ 705d / 28 * sin(16 * t + 212d / 45) + 579d / 11 * sin(18 * t + 34d / 21)
|
|
+ 19d / 27 * sin(19 * t + 190d / 43) + 15d / 29 * sin(20 * t + 89d / 20)
|
|
+ 497d / 23 * sin(21 * t + 128d / 77) + 205d / 51 * sin(23 * t + 57d / 34)
|
|
+ 317d / 35 * sin(24 * t + 68d / 39) + 17d / 4 * sin(26 * t + 202d / 43)
|
|
+ 927d / 34 * sin(27 * t + 33d / 20) + 31d / 23 * sin(28 * t + 154d / 123)
|
|
+ 37d / 6 * sin(29 * t + 28d / 17) + 159d / 19 * sin(30 * t + 22d / 13)
|
|
+ 87d / 23 * sin(32 * t + 82d / 49) + 57d / 28 * sin(33 * t + 103d / 52)
|
|
+ 77d / 29 * sin(35 * t + 116d / 25) + 489d / 41 * sin(36 * t + 49d / 29)
|
|
+ 61d / 30 * sin(37 * t + 62d / 39) + 313d / 47 * sin(38 * t + 69d / 40)
|
|
+ 36d / 11 * sin(39 * t + 41d / 23) + 90d / 91 * sin(40 * t + 7d / 4)
|
|
+ 47d / 19 * sin(41 * t + 101d / 63) - 8810d / 27) * theta(119 * pi - t)
|
|
* theta(t - 115 * pi)
|
|
+ (-91d / 46 * sin(11d / 8 - 62 * t) - 59d / 28 * sin(39d / 34 - 61 * t)
|
|
- 11d / 2 * sin(89d / 67 - 60 * t) - 15d / 8 * sin(32d / 35 - 59 * t)
|
|
- 53d / 22 * sin(48d / 35 - 58 * t) - 175d / 176 * sin(13d / 12 - 54 * t)
|
|
- 71d / 15 * sin(30d / 23 - 53 * t) - 166d / 27 * sin(25d / 18 - 52 * t)
|
|
- 48d / 29 * sin(20d / 31 - 51 * t) - 547d / 114 * sin(43d / 31 - 50 * t)
|
|
- 271d / 41 * sin(51d / 37 - 46 * t) - 141d / 20 * sin(42d / 31 - 45 * t)
|
|
- 129d / 13 * sin(37d / 26 - 44 * t) - 164d / 23 * sin(37d / 26 - 41 * t)
|
|
- 451d / 52 * sin(31d / 21 - 40 * t) - 27d / 22 * sin(63d / 44 - 38 * t)
|
|
- 83d / 7 * sin(35d / 24 - 36 * t) - 874d / 93 * sin(7d / 5 - 35 * t)
|
|
- 117d / 22 * sin(22d / 17 - 34 * t) - 911d / 69 * sin(3d / 2 - 32 * t)
|
|
- 109d / 37 * sin(27d / 19 - 31 * t) - 31d / 13 * sin(16d / 19 - 27 * t)
|
|
- 383d / 10 * sin(64d / 43 - 26 * t) - 455d / 19 * sin(31d / 21 - 24 * t)
|
|
- 764d / 17 * sin(58d / 39 - 18 * t) - 5417d / 48 * sin(74d / 49 - 17 * t)
|
|
- 1557d / 35 * sin(80d / 53 - 16 * t) - 3366d / 25 * sin(71d / 46 - 12 * t)
|
|
- 2267d / 100 * sin(91d / 61 - 11 * t) - 1523d / 27 * sin(239d / 159 - 10 * t)
|
|
- 7929d / 44 * sin(36d / 23 - 7 * t) + 32716d / 55 * sin(t + 146d / 31)
|
|
+ 26497d / 40 * sin(2 * t + 30d / 19) + 28971d / 35 * sin(3 * t + 19d / 12)
|
|
+ 12399d / 44 * sin(4 * t + 117d / 73) + 3783d / 29 * sin(5 * t + 145d / 31)
|
|
+ 21737d / 40 * sin(6 * t + 46d / 29) + 132d / 7 * sin(8 * t + 23d / 14)
|
|
+ 887d / 32 * sin(9 * t + 25d / 16) + 963d / 14 * sin(13 * t + 67d / 41)
|
|
+ 972d / 11 * sin(14 * t + 47d / 29) + 5575d / 77 * sin(15 * t + 53d / 33)
|
|
+ 382d / 25 * sin(19 * t + 47d / 32) + 855d / 44 * sin(20 * t + 28d / 17)
|
|
+ 701d / 42 * sin(21 * t + 33d / 20) + 109d / 23 * sin(22 * t + 14d / 3)
|
|
+ 197d / 38 * sin(23 * t + 43d / 29) + 118d / 37 * sin(25 * t + 37d / 38)
|
|
+ 272d / 31 * sin(28 * t + 44d / 27) + 5d / 23 * sin(29 * t + 25d / 26)
|
|
+ 195d / 28 * sin(30 * t + 47d / 28) + 185d / 24 * sin(33 * t + 57d / 37)
|
|
+ 103d / 13 * sin(37 * t + 46d / 29) + 43d / 9 * sin(39 * t + 41d / 26)
|
|
+ 257d / 32 * sin(42 * t + 51d / 32) + 33d / 13 * sin(43 * t + 41d / 30)
|
|
+ 67d / 15 * sin(47 * t + 31d / 19) + 39d / 14 * sin(48 * t + 44d / 25)
|
|
+ 88d / 31 * sin(49 * t + 30d / 19) + 113d / 68 * sin(55 * t + 103d / 69)
|
|
+ 1d / 54 * sin(56 * t + 197d / 58) + 79d / 24 * sin(57 * t + 167d / 100) + 287d / 29)
|
|
* theta(115 * pi - t) * theta(t - 111 * pi)
|
|
+ (-8d / 25 * sin(17d / 31 - 90 * t) - 144d / 37 * sin(29d / 19 - 89 * t)
|
|
- 102d / 47 * sin(37d / 24 - 88 * t) - 74d / 43 * sin(24d / 17 - 87 * t)
|
|
- 95d / 17 * sin(25d / 16 - 49 * t) - 137d / 27 * sin(16d / 11 - 27 * t)
|
|
+ 21445d / 52 * sin(t + 69d / 44) + 24223d / 27 * sin(2 * t + 113d / 24)
|
|
+ 23911d / 28 * sin(3 * t + 146d / 31) + 2675d / 8 * sin(4 * t + 64d / 41)
|
|
+ 5772d / 19 * sin(5 * t + 36d / 23) + 3258d / 17 * sin(6 * t + 11d / 7)
|
|
+ 5245d / 37 * sin(7 * t + 174d / 37) + 355d / 16 * sin(8 * t + 117d / 73)
|
|
+ 225d / 8 * sin(9 * t + 88d / 19) + 3255d / 26 * sin(10 * t + 11d / 7)
|
|
+ 1137d / 19 * sin(11 * t + 39d / 25) + 1310d / 21 * sin(12 * t + 8d / 5)
|
|
+ 943d / 21 * sin(13 * t + 29d / 18) + 9679d / 81 * sin(14 * t + 80d / 51)
|
|
+ 113d / 20 * sin(15 * t + 47d / 28) + 1342d / 47 * sin(16 * t + 86d / 53)
|
|
+ 3679d / 84 * sin(17 * t + 55d / 36) + 353d / 20 * sin(18 * t + 50d / 11)
|
|
+ 939d / 50 * sin(19 * t + 201d / 43) + 4789d / 82 * sin(20 * t + 48d / 31)
|
|
+ 2649d / 85 * sin(21 * t + 303d / 65) + 1753d / 59 * sin(22 * t + 36d / 23)
|
|
+ 268d / 29 * sin(23 * t + 58d / 39) + 55d / 16 * sin(24 * t + 82d / 43)
|
|
+ 228d / 37 * sin(25 * t + 353d / 235) + 8d / 25 * sin(26 * t + 49d / 31)
|
|
+ 422d / 25 * sin(28 * t + 93d / 20) + 211d / 21 * sin(29 * t + 38d / 27)
|
|
+ 60d / 41 * sin(30 * t + 131d / 29) + 162d / 11 * sin(31 * t + 65d / 14)
|
|
+ 2489d / 63 * sin(32 * t + 35d / 23) + 688d / 27 * sin(33 * t + 129d / 28)
|
|
+ 1447d / 62 * sin(34 * t + 55d / 36) + 233d / 26 * sin(35 * t + 85d / 57)
|
|
+ 259d / 26 * sin(36 * t + 95d / 21) + 149d / 10 * sin(37 * t + 25d / 17)
|
|
+ 235d / 57 * sin(38 * t + 50d / 11) + 185d / 38 * sin(39 * t + 183d / 41)
|
|
+ 125d / 13 * sin(40 * t + 68d / 45) + 223d / 31 * sin(41 * t + 39d / 25)
|
|
+ 61d / 12 * sin(42 * t + 355d / 79) + 1262d / 99 * sin(43 * t + 160d / 107)
|
|
+ 309d / 40 * sin(44 * t + 41d / 26) + 307d / 38 * sin(45 * t + 221d / 48)
|
|
+ 49d / 5 * sin(46 * t + 137d / 91) + 193d / 31 * sin(47 * t + 190d / 41)
|
|
+ 77d / 54 * sin(48 * t + 95d / 63) + 20d / 33 * sin(50 * t + 148d / 51)
|
|
+ 256d / 47 * sin(51 * t + 53d / 39) + 133d / 37 * sin(52 * t + 92d / 21)
|
|
+ 19d / 7 * sin(53 * t + 121d / 81) + 39d / 4 * sin(54 * t + 71d / 47)
|
|
+ 341d / 85 * sin(55 * t + 113d / 25) + 71d / 31 * sin(56 * t + 115d / 67)
|
|
+ 31d / 10 * sin(57 * t + 36d / 25) + 11d / 5 * sin(58 * t + 30d / 7)
|
|
+ 62d / 23 * sin(59 * t + 33d / 23) + 40d / 33 * sin(60 * t + 67d / 36)
|
|
+ 13d / 40 * sin(61 * t + 32d / 19) + 47d / 6 * sin(62 * t + 80d / 53)
|
|
+ 48d / 11 * sin(63 * t + 73d / 16) + 301d / 47 * sin(64 * t + 56d / 37)
|
|
+ 361d / 120 * sin(65 * t + 191d / 41) + 59d / 31 * sin(66 * t + 83d / 52)
|
|
+ 132d / 25 * sin(67 * t + 117d / 25) + 37d / 13 * sin(68 * t + 4d / 3)
|
|
+ 167d / 35 * sin(69 * t + 183d / 40) + 67d / 41 * sin(70 * t + 4d / 3)
|
|
+ 103d / 42 * sin(71 * t + 49d / 34) + 199d / 71 * sin(72 * t + 101d / 23)
|
|
+ 200d / 31 * sin(73 * t + 77d / 53) + 81d / 58 * sin(74 * t + 169d / 38)
|
|
+ 17d / 21 * sin(75 * t + 83d / 20) + 27d / 38 * sin(76 * t + 79d / 59)
|
|
+ 59d / 29 * sin(77 * t + 47d / 33) + 175d / 44 * sin(78 * t + 114d / 25)
|
|
+ 54d / 19 * sin(79 * t + 63d / 43) + 19d / 27 * sin(80 * t + 61d / 27)
|
|
+ 149d / 26 * sin(81 * t + 16d / 11) + 68d / 29 * sin(82 * t + 102d / 25)
|
|
+ 313d / 68 * sin(83 * t + 54d / 35) + 147d / 23 * sin(84 * t + 47d / 32)
|
|
+ 73d / 12 * sin(85 * t + 107d / 24) + 191d / 51 * sin(86 * t + 38d / 27)
|
|
+ 37d / 28 * sin(91 * t + 173d / 37) + 70d / 43 * sin(92 * t + 35d / 23)
|
|
+ 44d / 35 * sin(93 * t + 53d / 13) + 164d / 35 * sin(94 * t + 107d / 67)
|
|
+ 141d / 34 * sin(95 * t + 37d / 25) + 19d / 12 * sin(96 * t + 83d / 21)
|
|
+ 22d / 23 * sin(97 * t + 47d / 31) + 152d / 39 * sin(98 * t + 60d / 43)
|
|
+ 123d / 28 * sin(99 * t + 132d / 29) - 15137d / 22) * theta(111 * pi - t)
|
|
* theta(t - 107 * pi)
|
|
+ (-43d / 40 * sin(102d / 65 - 45 * t) - 74d / 41 * sin(25d / 27 - 35 * t)
|
|
- 47d / 19 * sin(15d / 16 - 34 * t) - 67d / 32 * sin(21d / 25 - 33 * t)
|
|
- 161d / 39 * sin(27d / 20 - 32 * t) - 12d / 23 * sin(17d / 12 - 29 * t)
|
|
- 29d / 57 * sin(45d / 37 - 27 * t) - 19d / 16 * sin(117d / 88 - 25 * t)
|
|
- 11d / 36 * sin(15d / 22 - 24 * t) - 11d / 30 * sin(33d / 82 - 23 * t)
|
|
- 43d / 57 * sin(14d / 17 - 22 * t) - 87d / 65 * sin(49d / 41 - 21 * t)
|
|
- 50d / 21 * sin(64d / 47 - 20 * t) - 17d / 59 * sin(56d / 55 - 6 * t)
|
|
- 56d / 61 * sin(77d / 58 - 5 * t) + 127d / 28 * sin(t + 149d / 32)
|
|
+ 15d / 2 * sin(2 * t + 21d / 13) + 35d / 29 * sin(3 * t + 49d / 29)
|
|
+ 1d / 9 * sin(4 * t + 51d / 43) + 37d / 38 * sin(7 * t + 19d / 12)
|
|
+ 18d / 31 * sin(8 * t + 57d / 13) + 38d / 31 * sin(9 * t + 55d / 12)
|
|
+ 7d / 10 * sin(10 * t + 74d / 45) + 9d / 34 * sin(11 * t + 69d / 34)
|
|
+ 39d / 19 * sin(12 * t + 41d / 26) + 89d / 26 * sin(13 * t + 67d / 42)
|
|
+ 63d / 26 * sin(14 * t + 107d / 23) + 119d / 16 * sin(15 * t + 23d / 5)
|
|
+ 311d / 18 * sin(16 * t + 56d / 33) + 1929d / 386 * sin(17 * t + 99d / 50)
|
|
+ 79d / 41 * sin(18 * t + 64d / 29) + 34d / 41 * sin(19 * t + 67d / 35)
|
|
+ 16d / 41 * sin(26 * t + 49d / 33) + 1d / 34 * sin(28 * t + 5d / 14)
|
|
+ 36d / 43 * sin(30 * t + 193d / 41) + 173d / 42 * sin(31 * t + 30d / 19)
|
|
+ 15d / 19 * sin(36 * t + 31d / 28) + 2d / 19 * sin(37 * t + 87d / 43)
|
|
+ 22d / 39 * sin(38 * t + 33d / 14) + 13d / 23 * sin(39 * t + 19d / 6)
|
|
+ 21d / 19 * sin(40 * t + 1641d / 820) + 29d / 28 * sin(41 * t + 172d / 39)
|
|
+ 39d / 34 * sin(42 * t + 58d / 31) + 16d / 29 * sin(43 * t + 50d / 23)
|
|
+ 24d / 25 * sin(44 * t + 41d / 23) + 17d / 23 * sin(46 * t + 289d / 62)
|
|
+ 37d / 25 * sin(47 * t + 30d / 17) + 17d / 29 * sin(48 * t + 239d / 52)
|
|
+ 29d / 73 * sin(49 * t + 41d / 26) - 8044d / 23) * theta(107 * pi - t)
|
|
* theta(t - 103 * pi)
|
|
+ (-33d / 29 * sin(7d / 6 - 53 * t) - 67d / 44 * sin(62d / 45 - 51 * t)
|
|
- 32d / 65 * sin(1d / 14 - 50 * t) - 151d / 49 * sin(54d / 41 - 49 * t)
|
|
- 63d / 38 * sin(29d / 23 - 47 * t) - 59d / 103 * sin(14d / 23 - 46 * t)
|
|
- 11d / 30 * sin(8d / 23 - 45 * t) - 151d / 32 * sin(99d / 79 - 44 * t)
|
|
- 53d / 26 * sin(45d / 38 - 43 * t) - 67d / 27 * sin(38d / 29 - 36 * t)
|
|
- 113d / 32 * sin(39d / 29 - 35 * t) - 182d / 51 * sin(81d / 58 - 33 * t)
|
|
- 391d / 65 * sin(33d / 23 - 29 * t) - 48d / 13 * sin(31d / 20 - 25 * t)
|
|
- 59d / 32 * sin(24d / 17 - 19 * t) - 90d / 91 * sin(41d / 33 - 18 * t)
|
|
- 863d / 54 * sin(35d / 24 - 17 * t) - 384d / 43 * sin(73d / 51 - 16 * t)
|
|
- 149d / 26 * sin(19d / 13 - 13 * t) - 90d / 19 * sin(65d / 43 - 12 * t)
|
|
+ 10d / 29 * sin(t + 47d / 32) + 15d / 17 * sin(2 * t + 77d / 45)
|
|
+ 300d / 37 * sin(3 * t + 62d / 39) + 4d / 13 * sin(4 * t + 8d / 5)
|
|
+ 7d / 29 * sin(5 * t + 109d / 25) + 46d / 27 * sin(6 * t + 49d / 30)
|
|
+ 39d / 23 * sin(7 * t + 30d / 19) + 64d / 47 * sin(8 * t + 72d / 43)
|
|
+ 19d / 20 * sin(9 * t + 63d / 37) + 14d / 5 * sin(10 * t + 41d / 25)
|
|
+ 37d / 14 * sin(11 * t + 27d / 16) + 207d / 28 * sin(14 * t + 248d / 149)
|
|
+ 288d / 25 * sin(15 * t + 58d / 35) + 123d / 52 * sin(20 * t + 85d / 46)
|
|
+ 194d / 13 * sin(21 * t + 17d / 10) + 64d / 13 * sin(22 * t + 103d / 22)
|
|
+ 335d / 27 * sin(23 * t + 31d / 18) + 103d / 18 * sin(24 * t + 13d / 7)
|
|
+ 83d / 20 * sin(26 * t + 117d / 67) + 243d / 52 * sin(27 * t + 36d / 19)
|
|
+ 1907d / 477 * sin(28 * t + 125d / 73) + 73d / 30 * sin(30 * t + 182d / 109)
|
|
+ 182d / 109 * sin(31 * t + 43d / 23) + 53d / 23 * sin(32 * t + 147d / 92)
|
|
+ 21d / 43 * sin(34 * t + 145d / 144) + 20d / 17 * sin(37 * t + 29d / 14)
|
|
+ 110d / 27 * sin(38 * t + 79d / 44) + 22d / 27 * sin(39 * t + 74d / 17)
|
|
+ 99d / 37 * sin(40 * t + 52d / 29) + 36d / 25 * sin(41 * t + 255d / 128)
|
|
+ 11d / 15 * sin(42 * t + 124d / 69) + 31d / 17 * sin(48 * t + 67d / 41)
|
|
+ 15d / 14 * sin(52 * t + 73d / 47) - 10105d / 36) * theta(103 * pi - t)
|
|
* theta(t - 99 * pi)
|
|
+ (3683d / 48 * sin(t + 74d / 47) + 41d / 26 * sin(2 * t + 103d / 22)
|
|
+ 149d / 17 * sin(3 * t + 85d / 54) + 6d / 13 * sin(4 * t + 51d / 11)
|
|
+ 112d / 43 * sin(5 * t + 11d / 7) + 17294d / 53) * theta(99 * pi - t)
|
|
* theta(t - 95 * pi)
|
|
+ (-19d / 40 * sin(29d / 20 - 11 * t) - 289d / 38 * sin(36d / 23 - 9 * t)
|
|
+ 802d / 33 * sin(t + 179d / 38) + 3002d / 35 * sin(2 * t + 85d / 54)
|
|
+ 159d / 41 * sin(3 * t + 61d / 39) + 1321d / 44 * sin(4 * t + 52d / 33)
|
|
+ 131d / 22 * sin(5 * t + 113d / 24) + 52d / 35 * sin(6 * t + 69d / 44)
|
|
+ 321d / 37 * sin(7 * t + 36d / 23) + 789d / 158 * sin(8 * t + 36d / 23)
|
|
+ 56d / 113 * sin(10 * t + 50d / 33) + 237d / 118 * sin(12 * t + 39d / 25) - 703d / 42)
|
|
* theta(95 * pi - t) * theta(t - 91 * pi)
|
|
+ (-121d / 68 * sin(25d / 16 - 4 * t) - 55d / 27 * sin(81d / 52 - 3 * t)
|
|
- 613d / 68 * sin(25d / 16 - 2 * t) - 505d / 19 * sin(47d / 30 - t) + 16067d / 23)
|
|
* theta(91 * pi - t) * theta(t - 87 * pi)
|
|
+ (-83d / 19 * sin(47d / 30 - 5 * t) + 56d / 25 * sin(t + 193d / 41)
|
|
+ 35d / 29 * sin(2 * t + 146d / 31) + 127d / 25 * sin(3 * t + 74d / 47)
|
|
+ 143d / 35 * sin(4 * t + 63d / 40) + 33d / 50 * sin(6 * t + 107d / 68) + 17679d / 28)
|
|
* theta(87 * pi - t) * theta(t - 83 * pi)
|
|
+ (-35d / 32 * sin(31d / 20 - 11 * t) - 55d / 48 * sin(61d / 39 - 9 * t)
|
|
- 30d / 17 * sin(50d / 33 - 6 * t) - 247d / 17 * sin(64d / 41 - 5 * t)
|
|
- 471d / 35 * sin(58d / 37 - 3 * t) + 405d / 23 * sin(t + 41d / 26)
|
|
+ 829d / 69 * sin(2 * t + 11d / 7) + 279d / 17 * sin(4 * t + 30d / 19)
|
|
+ 185d / 27 * sin(7 * t + 93d / 58) + 92d / 25 * sin(8 * t + 43d / 27)
|
|
+ 1d / 17 * sin(10 * t + 56d / 31) + 64d / 35 * sin(12 * t + 37d / 23) + 3306d / 17)
|
|
* theta(83 * pi - t) * theta(t - 79 * pi)
|
|
+ (-143d / 24 * sin(36d / 23 - t) + 9d / 22 * sin(2 * t + 47d / 10)
|
|
+ 31d / 42 * sin(3 * t + 28d / 17) + 1287d / 103 * sin(4 * t + 30d / 19)
|
|
+ 626d / 51 * sin(5 * t + 41d / 26) + 173d / 31 * sin(6 * t + 113d / 24)
|
|
+ 138d / 19 * sin(7 * t + 19d / 12) + 15d / 4 * sin(8 * t + 27d / 17)
|
|
+ 39d / 34 * sin(9 * t + 8d / 5) + 11d / 18 * sin(10 * t + 202d / 43)
|
|
+ 23d / 25 * sin(11 * t + 71d / 44) + 133d / 34 * sin(12 * t + 27d / 17) + 19064d / 89)
|
|
* theta(79 * pi - t) * theta(t - 75 * pi)
|
|
+ (-69d / 38 * sin(44d / 29 - 19 * t) - 49d / 17 * sin(119d / 79 - 16 * t)
|
|
- 65d / 23 * sin(83d / 55 - 11 * t) - 149d / 35 * sin(32d / 21 - 10 * t)
|
|
- 311d / 56 * sin(14d / 9 - 8 * t) - 83d / 40 * sin(20d / 13 - 7 * t)
|
|
- 35d / 6 * sin(57d / 37 - 6 * t) - 55d / 19 * sin(57d / 37 - 5 * t)
|
|
- 93d / 19 * sin(39d / 25 - 4 * t) - 87d / 8 * sin(39d / 25 - 3 * t)
|
|
- 517d / 30 * sin(25d / 16 - 2 * t) + 387d / 28 * sin(t + 91d / 58)
|
|
+ 68d / 33 * sin(9 * t + 27d / 17) + 67d / 34 * sin(12 * t + 76d / 47)
|
|
+ 13d / 20 * sin(13 * t + 45d / 26) + 2d / 25 * sin(14 * t + 127d / 28)
|
|
+ 131d / 56 * sin(15 * t + 61d / 38) + 62d / 29 * sin(17 * t + 188d / 113)
|
|
+ 26d / 37 * sin(18 * t + 77d / 46) + 8d / 33 * sin(20 * t + 43d / 38) + 5327d / 11)
|
|
* theta(75 * pi - t) * theta(t - 71 * pi)
|
|
+ (-21d / 23 * sin(98d / 65 - 16 * t) - 22d / 23 * sin(47d / 30 - 9 * t)
|
|
- 13d / 19 * sin(25d / 16 - 7 * t) + 28d / 57 * sin(t + 87d / 56)
|
|
+ 1265d / 47 * sin(2 * t + 179d / 38) + 223d / 20 * sin(3 * t + 11d / 7)
|
|
+ 227d / 19 * sin(4 * t + 179d / 38) + 45d / 22 * sin(5 * t + 11d / 7)
|
|
+ 188d / 53 * sin(6 * t + 127d / 27) + 116d / 35 * sin(8 * t + 179d / 38)
|
|
+ 19d / 12 * sin(10 * t + 27d / 17) + 8d / 11 * sin(11 * t + 19d / 12)
|
|
+ 29d / 13 * sin(12 * t + 179d / 38) + 69d / 43 * sin(13 * t + 25d / 16)
|
|
+ 277d / 278 * sin(14 * t + 107d / 23) + 31d / 27 * sin(15 * t + 127d / 27)
|
|
+ 63d / 22 * sin(17 * t + 155d / 33) + 13d / 19 * sin(18 * t + 43d / 27)
|
|
+ 107d / 89 * sin(19 * t + 103d / 22) + 13d / 12 * sin(20 * t + 61d / 13)
|
|
+ 22d / 17 * sin(21 * t + 39d / 25) + 8121d / 16) * theta(71 * pi - t)
|
|
* theta(t - 67 * pi)
|
|
+ (-89d / 18 * sin(68d / 45 - 23 * t) - 27d / 17 * sin(26d / 17 - 20 * t)
|
|
- 109d / 39 * sin(73d / 47 - 18 * t) - 142d / 57 * sin(26d / 17 - 17 * t)
|
|
- 146d / 27 * sin(45d / 29 - 14 * t) - 43d / 9 * sin(31d / 20 - 13 * t)
|
|
- 164d / 33 * sin(95d / 61 - 12 * t) - 91d / 34 * sin(43d / 28 - 11 * t)
|
|
- 30d / 19 * sin(29d / 19 - 9 * t) - 55d / 17 * sin(59d / 38 - 8 * t)
|
|
- 183d / 29 * sin(64d / 41 - 6 * t) - 137d / 25 * sin(53d / 34 - 5 * t)
|
|
- 124d / 19 * sin(36d / 23 - 4 * t) - 655d / 44 * sin(47d / 30 - 2 * t)
|
|
- 472d / 13 * sin(58d / 37 - t) + 43d / 57 * sin(3 * t + 70d / 43)
|
|
+ 41d / 12 * sin(7 * t + 85d / 54) + 29d / 115 * sin(10 * t + 38d / 23)
|
|
+ 27d / 7 * sin(15 * t + 19d / 12) + 21d / 20 * sin(16 * t + 36d / 23)
|
|
+ 26d / 51 * sin(19 * t + 36d / 23) + 2d / 31 * sin(21 * t + 67d / 42)
|
|
+ 59d / 26 * sin(22 * t + 31d / 19) + 8662d / 25) * theta(67 * pi - t)
|
|
* theta(t - 63 * pi)
|
|
+ (-40d / 27 * sin(86d / 57 - 24 * t) - 5d / 33 * sin(4d / 15 - 23 * t)
|
|
- 107d / 27 * sin(57d / 37 - 22 * t) - 163d / 12 * sin(37d / 24 - 18 * t)
|
|
- 80d / 43 * sin(73d / 47 - 15 * t) - 245d / 57 * sin(31d / 20 - 13 * t)
|
|
- 22d / 29 * sin(43d / 28 - 10 * t) - 99d / 20 * sin(59d / 38 - 8 * t)
|
|
- 18d / 11 * sin(59d / 38 - 7 * t) - 35d / 16 * sin(58d / 37 - 6 * t)
|
|
- 81d / 161 * sin(41d / 28 - 3 * t) - 271d / 13 * sin(58d / 37 - 2 * t)
|
|
+ 148d / 7 * sin(t + 85d / 54) + 98d / 25 * sin(4 * t + 146d / 31)
|
|
+ 67d / 24 * sin(5 * t + 30d / 19) + 8d / 25 * sin(9 * t + 179d / 38)
|
|
+ 5d / 9 * sin(11 * t + 131d / 28) + 46d / 51 * sin(12 * t + 32d / 21)
|
|
+ 108d / 31 * sin(14 * t + 69d / 43) + 149d / 29 * sin(16 * t + 45d / 28)
|
|
+ 59d / 15 * sin(17 * t + 46d / 29) + 134d / 21 * sin(19 * t + 125d / 78)
|
|
+ 158d / 27 * sin(20 * t + 44d / 27) + 35d / 29 * sin(21 * t + 31d / 19) + 9838d / 25)
|
|
* theta(63 * pi - t) * theta(t - 59 * pi)
|
|
+ (-385d / 16 * sin(47d / 30 - 3 * t) - 21082d / 91 * sin(69d / 44 - t)
|
|
+ 21d / 13 * sin(2 * t + 8d / 5) - 31214d / 91) * theta(59 * pi - t)
|
|
* theta(t - 55 * pi)
|
|
+ (-860d / 41 * sin(39d / 25 - 3 * t) - 5675d / 26 * sin(69d / 44 - t)
|
|
+ 265d / 43 * sin(2 * t + 46d / 29) - 33516d / 73) * theta(55 * pi - t)
|
|
* theta(t - 51 * pi)
|
|
+ (-621d / 28 * sin(36d / 23 - 3 * t) - 244d / 31 * sin(91d / 58 - 2 * t)
|
|
- 4739d / 19 * sin(102d / 65 - t) - 20129d / 76) * theta(51 * pi - t)
|
|
* theta(t - 47 * pi)
|
|
+ (-504d / 31 * sin(25d / 16 - 2 * t) - 6167d / 31 * sin(80d / 51 - t) - 4810d / 29)
|
|
* theta(47 * pi - t) * theta(t - 43 * pi)
|
|
+ (-1d / 14 * sin(9d / 11 - 12 * t) - 21d / 41 * sin(29d / 25 - 11 * t)
|
|
- 7d / 10 * sin(48d / 35 - 9 * t) + 157d / 25 * sin(t + 118d / 41)
|
|
+ 92d / 41 * sin(2 * t + 110d / 39) + 571d / 84 * sin(3 * t + 101d / 23)
|
|
+ 146d / 37 * sin(4 * t + 211d / 48) + 71d / 34 * sin(5 * t + 45d / 26)
|
|
+ 7d / 31 * sin(6 * t + 4d / 3) + 7d / 13 * sin(7 * t + 44d / 25)
|
|
+ 9d / 11 * sin(8 * t + 37d / 53) + 12d / 29 * sin(10 * t + 31d / 18) + 16173d / 50)
|
|
* theta(43 * pi - t) * theta(t - 39 * pi)
|
|
+ (-25d / 29 * sin(1d / 110 - 10 * t) - 81d / 71 * sin(11d / 29 - 6 * t)
|
|
- 101d / 19 * sin(16d / 49 - 4 * t) - 81d / 19 * sin(11d / 43 - 3 * t)
|
|
+ 167d / 43 * sin(t + 175d / 41) + 181d / 37 * sin(2 * t + 58d / 17)
|
|
+ 6d / 5 * sin(5 * t + 61d / 14) + 25d / 22 * sin(7 * t + 3)
|
|
+ 37d / 30 * sin(8 * t + 1d / 25) + 31d / 40 * sin(9 * t + 61d / 22)
|
|
+ 9d / 35 * sin(11 * t + 103d / 30) + 14d / 19 * sin(12 * t + 1d / 10) + 8453d / 25)
|
|
* theta(39 * pi - t) * theta(t - 35 * pi)
|
|
+ (-151d / 36 * sin(17d / 23 - 3 * t) - 331d / 12 * sin(8d / 31 - t)
|
|
+ 184d / 47 * sin(2 * t + 160d / 39) + 324) * theta(35 * pi - t) * theta(t - 31 * pi)
|
|
+ (-50d / 19 * sin(6d / 17 - 3 * t) - 1333d / 36 * sin(1d / 5 - t)
|
|
+ 23d / 19 * sin(2 * t + 23d / 9) + 29d / 36 * sin(4 * t + 67d / 24) + 13271d / 39)
|
|
* theta(31 * pi - t) * theta(t - 27 * pi)
|
|
+ (-119d / 22 * sin(27d / 19 - 2 * t) + 1265d / 36 * sin(t + 4d / 29)
|
|
+ 98d / 15 * sin(3 * t + 3d / 5) + 89d / 48 * sin(4 * t + 142d / 31)
|
|
+ 55d / 19 * sin(5 * t + 32d / 37) + 16d / 17 * sin(6 * t + 89d / 25)
|
|
+ 21d / 16 * sin(7 * t + 23d / 40) + 8d / 13 * sin(8 * t + 37d / 12) + 10562d / 33)
|
|
* theta(27 * pi - t) * theta(t - 23 * pi)
|
|
+ (-71d / 46 * sin(1d / 11 - 7 * t) - 115d / 64 * sin(5d / 19 - 5 * t)
|
|
- 11d / 28 * sin(16d / 25 - 4 * t) - 44d / 17 * sin(33d / 43 - 3 * t)
|
|
- 1265d / 29 * sin(2d / 13 - t) + 59d / 16 * sin(2 * t + 211d / 53)
|
|
+ 12d / 25 * sin(6 * t + 57d / 20) + 26d / 51 * sin(8 * t + 65d / 17) + 11467d / 34)
|
|
* theta(23 * pi - t) * theta(t - 19 * pi)
|
|
+ (-23d / 41 * sin(81d / 58 - 5 * t) + 4367d / 48 * sin(t + 111d / 38)
|
|
+ 49d / 16 * sin(2 * t + 173d / 39) + 134d / 45 * sin(3 * t + 70d / 29)
|
|
+ 64d / 37 * sin(4 * t + 41d / 17) + 21d / 46 * sin(6 * t + 29d / 13)
|
|
+ 10d / 19 * sin(7 * t + 53d / 37) + 10855d / 34) * theta(19 * pi - t)
|
|
* theta(t - 15 * pi)
|
|
+ (-127d / 13 * sin(7d / 18 - 3 * t) + 2713d / 29 * sin(t + 2d / 37)
|
|
+ 101d / 13 * sin(2 * t + 203d / 45) + 89d / 34 * sin(4 * t + 73d / 17)
|
|
+ 26d / 15 * sin(5 * t + 26d / 41) + 2d / 9 * sin(6 * t + 177d / 50)
|
|
+ 35d / 71 * sin(7 * t + 66d / 31) + 10805d / 33) * theta(15 * pi - t)
|
|
* theta(t - 11 * pi)
|
|
+ (-20d / 23 * sin(38d / 29 - 11 * t) - 31d / 18 * sin(46d / 37 - 9 * t)
|
|
- 497d / 108 * sin(9d / 16 - 5 * t) - 2375d / 26 * sin(3d / 29 - t)
|
|
+ 970d / 41 * sin(2 * t + 35d / 32) + 1011d / 92 * sin(3 * t + 7d / 38)
|
|
+ 131d / 27 * sin(4 * t + 91d / 90) + 24d / 71 * sin(6 * t + 34d / 37)
|
|
+ 90d / 29 * sin(7 * t + 14d / 23) + 21d / 16 * sin(8 * t + 25d / 12)
|
|
+ 21d / 38 * sin(10 * t + 89d / 19) + 7d / 27 * sin(12 * t + 68d / 15) - 10719d / 37)
|
|
* theta(11 * pi - t) * theta(t - 7 * pi)
|
|
+ (-11d / 37 * sin(4d / 7 - 6 * t) - 299d / 56 * sin(24d / 19 - 5 * t)
|
|
- 499d / 38 * sin(5d / 44 - 3 * t) - 6150d / 37 * sin(12d / 59 - t)
|
|
+ 1019d / 38 * sin(2 * t + 28d / 37) + 183d / 53 * sin(4 * t + 85d / 71)
|
|
+ 95d / 43 * sin(7 * t + 169d / 38) + 29d / 27 * sin(8 * t + 111d / 40)
|
|
+ 21d / 22 * sin(9 * t + 16d / 29) + 194d / 83 * sin(10 * t + 164d / 57)
|
|
+ 31d / 30 * sin(11 * t + 1d / 53) + 17d / 31 * sin(12 * t + 77d / 29) - 24819d / 82)
|
|
* theta(7 * pi - t) * theta(t - 3 * pi)
|
|
+ (-14d / 13 * sin(4d / 45 - 10 * t) - 229d / 26 * sin(16d / 23 - 7 * t)
|
|
- 222d / 17 * sin(28d / 23 - 5 * t) - 851d / 29 * sin(10d / 51 - 3 * t)
|
|
- 12070d / 13 * sin(12d / 11 - t) + 270d / 31 * sin(2 * t + 62d / 15)
|
|
+ 53d / 7 * sin(4 * t + 400d / 87) + 59d / 10 * sin(6 * t + 12d / 13)
|
|
+ 141d / 31 * sin(8 * t + 30d / 17) + 79d / 40 * sin(9 * t + 121d / 26) + 5838d / 29)
|
|
* theta(3 * pi - t) * theta(t + pi)) * theta(Math.Sqrt(Math.Sign(sin(t / 2))));
|
|
|
|
var model = new PlotModel { Title = "Angelina Jolie curve", PlotType = PlotType.Cartesian };
|
|
var fs = new FunctionSeries(xt, yt, 0, Math.PI * 120, 10000);
|
|
model.Series.Add(fs);
|
|
|
|
// Insert breaks at discontinuities
|
|
// TODO: this should be improved...
|
|
for (int i = 0; i + 1 < fs.Points.Count; i++)
|
|
{
|
|
var dx = fs.Points[i + 1].X - fs.Points[i].X;
|
|
var dy = fs.Points[i + 1].Y - fs.Points[i].Y;
|
|
if ((dx * dx) + (dy * dy) > 100000)
|
|
{
|
|
fs.Points.Insert(i + 1, new DataPoint(double.NaN, double.NaN));
|
|
i++;
|
|
}
|
|
}
|
|
|
|
return model;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the stream for the specified embedded resource.
|
|
/// </summary>
|
|
/// <param name="name">The name of the resource.</param>
|
|
/// <returns>A stream.</returns>
|
|
private static Stream GetResourceStream(string name)
|
|
{
|
|
return typeof(MiscExamples).GetTypeInfo().Assembly.GetManifestResourceStream("ExampleLibrary.Resources." + name);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Renders the Mandelbrot set as an image inside the current plot area.
|
|
/// </summary>
|
|
public class MandelbrotSetSeries : XYAxisSeries
|
|
{
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="MandelbrotSetSeries"/> class.
|
|
/// </summary>
|
|
public MandelbrotSetSeries()
|
|
{
|
|
this.TrackerFormatString = "X: {0:0.000}\r\nY: {1:0.000}\r\nIterations: {2}";
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the color axis.
|
|
/// </summary>
|
|
/// <value>The color axis.</value>
|
|
/// <remarks>The Maximum value of the ColorAxis defines the maximum number of iterations.</remarks>
|
|
public LinearColorAxis ColorAxis { get; protected set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the color axis key.
|
|
/// </summary>
|
|
/// <value>The color axis key.</value>
|
|
public string ColorAxisKey { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets the point on the series that is nearest the specified point.
|
|
/// </summary>
|
|
/// <param name="point">The point.</param>
|
|
/// <param name="interpolate">Interpolate the series if this flag is set to <c>true</c>.</param>
|
|
/// <returns>A TrackerHitResult for the current hit.</returns>
|
|
public override TrackerHitResult GetNearestPoint(ScreenPoint point, bool interpolate)
|
|
{
|
|
var p = this.InverseTransform(point);
|
|
var it = this.Solve(p.X, p.Y, (int)this.ColorAxis.ActualMaximum + 1);
|
|
return new TrackerHitResult
|
|
{
|
|
Series = this,
|
|
DataPoint = p,
|
|
Position = point,
|
|
Item = null,
|
|
Index = -1,
|
|
Text = StringHelper.Format(this.ActualCulture, this.TrackerFormatString, null, p.X, p.Y, it)
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// Renders the series on the specified render context.
|
|
/// </summary>
|
|
/// <param name="rc">The rendering context.</param>
|
|
public override void Render(IRenderContext rc)
|
|
{
|
|
var p0 = this.Transform(this.XAxis.ActualMinimum, this.YAxis.ActualMinimum);
|
|
var p1 = this.Transform(this.XAxis.ActualMaximum, this.YAxis.ActualMaximum);
|
|
var w = (int)(p1.X - p0.X);
|
|
var h = (int)(p0.Y - p1.Y);
|
|
int maxIterations = (int)this.ColorAxis.ActualMaximum + 1;
|
|
var pixels = new OxyColor[w, h];
|
|
|
|
ParallelFor(
|
|
0,
|
|
h,
|
|
i =>
|
|
{
|
|
double y = this.YAxis.ActualMaximum - ((double)i / (h - 1) * (this.YAxis.ActualMaximum - this.YAxis.ActualMinimum));
|
|
for (int j = 0; j < w; j++)
|
|
{
|
|
double x = this.XAxis.ActualMinimum
|
|
+ ((double)j / (w - 1)
|
|
* (this.XAxis.ActualMaximum - this.XAxis.ActualMinimum));
|
|
var iterations = Solve(x, y, maxIterations);
|
|
pixels[j, i] = this.ColorAxis.GetColor((double)iterations);
|
|
}
|
|
});
|
|
|
|
var bitmap = OxyImage.Create(pixels, ImageFormat.Png);
|
|
rc.DrawImage(bitmap, p0.X, p1.Y, p1.X - p0.X, p0.Y - p1.Y, 1, true);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Calculates the escape time for the specified point.
|
|
/// </summary>
|
|
/// <param name="x0">The x0.</param>
|
|
/// <param name="y0">The y0.</param>
|
|
/// <param name="maxIterations">The max number of iterations.</param>
|
|
/// <returns>The number of iterations.</returns>
|
|
protected virtual int Solve(double x0, double y0, int maxIterations)
|
|
{
|
|
int iteration = 0;
|
|
double x = 0;
|
|
double y = 0;
|
|
while ((x * x) + (y * y) <= 4 && iteration < maxIterations)
|
|
{
|
|
double xtemp = (x * x) - (y * y) + x0;
|
|
y = (2 * x * y) + y0;
|
|
x = xtemp;
|
|
iteration++;
|
|
}
|
|
|
|
return iteration;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Ensures that the axes of the series is defined.
|
|
/// </summary>
|
|
protected override void EnsureAxes()
|
|
{
|
|
base.EnsureAxes();
|
|
this.ColorAxis = this.ColorAxisKey != null ?
|
|
this.PlotModel.GetAxis(this.ColorAxisKey) as LinearColorAxis :
|
|
this.PlotModel.DefaultColorAxis as LinearColorAxis;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Executes a serial for loop.
|
|
/// </summary>
|
|
/// <param name="i0">The start index (inclusive).</param>
|
|
/// <param name="i1">The end index (exclusive).</param>
|
|
/// <param name="action">The action that is invoked once per iteration.</param>
|
|
private static void SerialFor(int i0, int i1, Action<int> action)
|
|
{
|
|
for (int i = i0; i < i1; i++)
|
|
{
|
|
action(i);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Executes a parallel for loop using ThreadPool.
|
|
/// </summary>
|
|
/// <param name="i0">The start index (inclusive).</param>
|
|
/// <param name="i1">The end index (exclusive).</param>
|
|
/// <param name="action">The action that is invoked once per iteration.</param>
|
|
private static void ParallelFor(int i0, int i1, Action<int> action)
|
|
{
|
|
// Environment.ProcessorCount is not available here. Use 4 processors.
|
|
int p = 4;
|
|
|
|
// Initialize wait handles
|
|
var doneEvents = new WaitHandle[p];
|
|
for (int i = 0; i < p; i++)
|
|
{
|
|
doneEvents[i] = new ManualResetEvent(false);
|
|
}
|
|
|
|
// Invoke the action of a partition of the range
|
|
Action<int, int, int> invokePartition = (k, j0, j1) =>
|
|
{
|
|
for (int i = j0; i < j1; i++)
|
|
{
|
|
action(i);
|
|
}
|
|
|
|
((ManualResetEvent)doneEvents[k]).Set();
|
|
};
|
|
|
|
// Start p background threads
|
|
int n = (i1 - i0 + p - 1) / p;
|
|
for (int i = 0; i < p; i++)
|
|
{
|
|
int k = i;
|
|
int j0 = i0 + (i * n);
|
|
var j1 = Math.Min(j0 + n, i1);
|
|
Task.Factory.StartNew(
|
|
() => invokePartition(k, j0, j1),
|
|
CancellationToken.None,
|
|
TaskCreationOptions.LongRunning,
|
|
TaskScheduler.Default);
|
|
}
|
|
|
|
// Wait for the threads to finish
|
|
foreach (var wh in doneEvents)
|
|
{
|
|
wh.WaitOne();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
private class JuliaSetSeries : MandelbrotSetSeries
|
|
{
|
|
public double C1 { get; set; }
|
|
public double C2 { get; set; }
|
|
|
|
protected override int Solve(double x0, double y0, int maxIterations)
|
|
{
|
|
int iteration = 0;
|
|
double x = x0;
|
|
double y = y0;
|
|
double cr = this.C1;
|
|
double ci = this.C2;
|
|
while ((x * x) + (y * y) <= 4 && iteration < maxIterations)
|
|
{
|
|
double xtemp = (x * x) - (y * y) + cr;
|
|
y = (2 * x * y) + ci;
|
|
x = xtemp;
|
|
iteration++;
|
|
}
|
|
|
|
return iteration;
|
|
}
|
|
}
|
|
|
|
private class CustomAxis : LinearAxis
|
|
{
|
|
public IList<double> MajorTicks { get; } = new List<double>();
|
|
public IList<double> MinorTicks { get; } = new List<double>();
|
|
public IList<string> Labels { get; } = new List<string>();
|
|
|
|
public override void GetTickValues(out IList<double> majorLabelValues, out IList<double> majorTickValues, out IList<double> minorTickValues)
|
|
{
|
|
majorTickValues = majorLabelValues = this.MajorTicks.Where(d => d >= this.ActualMinimum && d <= this.ActualMaximum).ToList();
|
|
minorTickValues = this.MinorTicks.Where(d => d >= this.ActualMinimum && d <= this.ActualMaximum).ToList();
|
|
}
|
|
|
|
protected override string FormatValueOverride(double x)
|
|
{
|
|
return this.Labels[this.MajorTicks.IndexOf(x)];
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|