こんにちは、c# で 3D 関数を描画しようとすると問題が発生します。
私のコード:
string expr = "Abs(x)+Abs(y)";
int pointX = 43;
int pointNumber = pointX * pointX;
double[] XX = new double[pointX];
double[] YY = new double[pointX];
double[,] ZZ = new double[pointX, pointX];
for (int i = 0; i < pointX; i++)
{
double d = (double)i;
XX[i] = YY[i] = -10 + 20 * (d / (pointX - 1));
if (XX[i] == 0) { XX[i] = 0.01; YY[i] = 0.01; }
}
Parser p = new Parser();
for (int j = 0; j < pointX; j++)
{
for (int k = 0; k < pointX; k++)
{
Hashtable h = new Hashtable();
h.Add("x", XX[j]);
h.Add("y", YY[k]);
ZZ[j, k] = p.Parse(expr, h);
}
}
次に、インターネットで、IlNumerics を使用して 3D 関数を描画するための次のコードを提供します。
This code is too old
しかし、コードを実行しようとすると、CIL でエラーが発生します。これは、meshgrid が別の方法になりIlSurfaceGraph
、m_panel2.Graphs.AddSurfGraph
もう存在しないためです。
どうすればこれを解決できますか?
編集1
ドキュメントをもう一度読み、3D チャートを作成するために次のコードを試しました。
ILArray<float> Z = ZZ;
ilPanel1.Scene = new ILScene() {
new ILPlotCube(twoDMode: false) {
new ILSurface(ZZ) {
UseLighting = true
}
}
};
ilPanel1.Scene.First<ILPlotCube>().Rotation = Matrix4.Rotation(
new Vector3(1f, 0.23f, 1), 0.7f);
ILArray は空ではなく、結果は次のとおり
です。グラフが空である理由がわかりません...
行列 1849 の float の数。ここにすべての出力が表示されます (長すぎるので、pastebin に投稿しました)。この例は完全に機能し、問題はありません。