1

コンストラクターの引数を として理解していることが正しいかどうかを知りたいですFunction<Point2D, Number> function。x軸の各ステップの後に変数を適用することに基づいて1Dチャートに使用した私の関数ですが、Point2D2つの変数を含むパラメーターとしてあります:xおよびy、私が正しい場合、x変数は「0.5」を増加させるステップですapplyy の関数の後のすべての計算。では、ジェネリック型の 2 番目のパラメーターであるNumber? SurfacePlotMeshクラスを使用して、他の機能を実装するにはどうすればよいですか。誰かがそれがどのように機能するかを少し説明してもらえますか? またはドキュメントをリンクしますか(存在する場合)?

4

1 に答える 1

3

SurfacePlotMeshFXyzライブラリののコードを見ると、座標createPlotMesh()から取得した平面グリッド (x、y) 上の 2 つの座標に基づいてサーフェスのメッシュを作成するメソッドPoint2Dと、その点に適用される関数によって与えられる関数値 (z)。

デフォルトのパラメータを見ている場合:

private static final Function<Point2D, Number> DEFAULT_FUNCTION = 
    p -> Math.sin(p.magnitude()) / p.magnitude();

private static final double DEFAULT_X_RANGE = 10; // -5 +5
private static final double DEFAULT_Y_RANGE = 10; // -5 +5
private static final int DEFAULT_X_DIVISIONS = 64;
private static final int DEFAULT_Y_DIVISIONS = 64;
private static final double DEFAULT_FUNCTION_SCALE = 1.0D;

つまり、10x10 単位のグリッドがあり、64x64 分割されています。合計 65x65 頂点のすべての頂点 (x,y) で、関数を評価して値 z = f(x, y) を取得します。既定のスケールは 1 です。

つまり、左上の 2D ポイント (-5, -5) -> f(-5, -5) = 1.0025 の場合、メッシュの 3D ポイントは (-5, -5, 1.0025) になります。の上。

この図は、20x20 分割の 10x10 範囲のグリッドと、その関数のスケール 4 のメッシュを示しています。

グリッドとサーフェス

次のように、関数はいつでも変更できます。

  • p -> p.getX()
  • p -> p.getX() * p.getY()
  • p -> Math.cos(p.getX()) * Math.sin(p.getY())
  • ...

他のパラメーター (範囲、区分、スケール) と同様に。

現時点ではドキュメントはありませんが、コードは完全に利用可能です。

また、ほとんどのサンプルを実行し、パラメーターを変更して、ここでもう一度再コンパイルすることなく簡単に結果を確認できるサンプラーもあります。

編集

OP コメントに基づいて、y依存関係のない関数の場合、y に非常に低い値を設定することで、リボン タイプのサーフェスを作成できます。

private void createSurface(double time) {
    surface = new SurfacePlotMesh(
        p-> Math.sqrt(Math.pow(Math.exp(-(Math.pow((p.getX() - time), 2))) * 
            (Math.cos((2 * Math.PI * (p.getX() - time)))), 2) + 
            Math.pow(Math.exp(-(Math.pow((p.getX() - time), 2))) * 
            (Math.sin((2 * Math.PI * (p.getX() - time)))), 2)),
            10, 0.1, 64, 2, 2);
}

パラメータはtime固定値またはアニメーションに設定されます。

リボン

于 2016-05-17T18:13:11.510 に答える