グラフをスケーリングしますが、画像のような問題があります( http://postimage.org/image/74ra418yv/ )。これはシミュレーション ウィンドウなので、各 pointpairlist は単位時間ごとに計算されます。それらすべてを同時に表示するわけではありません。そこで、スケーリング用の CalculateScale 関数を作成します。すべてのリストで、最小の X、Y と最大の X、Y が必要です。CalculateScale で x 軸と y 軸の最小値と最大値を見つけます。それはうまく機能しますが、唯一の問題は、地域に数が集まっていることです。
public void EditScale(List<PointPairList> lists)
{
GraphScale scale = CalculateScale(lists);
GraphPane.XAxis.Scale.Min = scale.MinX - 20;
GraphPane.XAxis.Scale.Max = scale.MaxX + 20;
GraphPane.YAxis.Scale.Min = scale.MinY - 20;
GraphPane.YAxis.Scale.Max = scale.MaxY + 20;
}
protected GraphScale CalculateScale(List<PointPairList> list)
{
double maximaY = -10000000;
double minimaY = 10000000;
double maximaX = -10000000;
double minimaX = 10000000;
double listMinY, listMaxY, listMinX, listMaxX;
for (int i = 0; i < list.Count; i++)
{
listMaxY = list[i].Max(point => point.Y);
listMinY = list[i].Min(point => point.Y);
if (listMaxY > maximaY)
maximaY = listMaxY;
if (listMinY < minimaY)
minimaY = listMinY;
listMaxX = list[i].Max(point => point.X);
listMinX = list[i].Min(point => point.X);
if (listMaxX > maximaX)
maximaX = listMaxX;
if (listMinX < minimaX)
minimaX = listMinX;
}
return new GraphScale(minimaX, maximaX, minimaY, maximaY);
}