グラフ上で図形を制御して移動する方法を探していますデータの視覚化を目的として、JSL スクリプトを使用して、プロット (グラフ ビルダー) 全体で「描画された」図形または一連の図形を制御および移動する方法を探しています。一連のフレームを使用し、それらをスクロールして移動の印象を与えるアニメーションと考えてください。
「描かれた」形状とは、次のようなものを意味します。
長方形 ()
私は次のアプローチを取ることを考えていましたが、これをどのように実行すればよいのか、またはより良いアプローチがあるかどうかはよくわかりません。
- 必要な図形をスクリプト化/描画し、変数(行の値など)に関連付けます。これをフレームと呼びます。
- 必要な形状を異なる位置に配置して複数のフレームを構築し、各フレームに異なる変数を割り当てます。
例えば
フレーム 1 - 図形は位置 (X+0,Y) にあり、変数 (v = 1) に関連付けられています。
フレーム 2 - 図形は位置 (X+1,Y) にあり、変数 (v = 2) に関連付けられています。
フレーム 3 - 図形は位置 (X+2,Y) にあり、変数 (v = 3) に関連付けられています。
- ローカルデータフィルターを使用して、どの変数が選択されているかをスクロールし、描画された図形の位置を移動します。
私の例で説明したように、これにより、形状が X+ 方向に移動している印象を与えられることを期待します。
前述のように、これが機能するかどうかはわかりませんが、選択した変数が変更されたときに、新しい図面の代わりに古い図面(上書き)を削除するには、グラフ ビルダー レポートを何らかの方法で更新/リフレッシュする必要があります。
このようなことが可能かどうか、またどのようにコード化できるかを知りたいと思っています。
自動化とスクリプトデータの探索と視覚化Re: グラフ上で図形を制御して移動する方法を探しています何を視覚化しようとしているのか、もっと良い例を挙げてもらえますか?例えば、JMP にはフレームボックス内のカーソル位置に基づいて描画できる Mousetrap() があります。
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
);
exx = 70;
exy = 70;
Report(gb)[FrameBox(1)] << Add Graphics Script(
Mousetrap(
exx = x;
exy = y;
);
Rect({exx - 10, exy - 10}, {exx, exy});
);
</CODE></P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-751817" slang="en-US" mode="CREATE">Re: グラフ上で図形を制御して移動する方法を探しています</LINGO-SUB><LINGO-BODY id="lingo-body-751817" slang="en-US" mode="CREATE"><PRE><CODE class=" language-jsl">x1 = y1 = x2 = y2 = 0;
keepRunning=1;
New Window( "Example", gb = Graph Box( Frame Size( 800, 800 ), Oval( x1, y1, x2, y2 ) ), <<ONCLOSE></ONCLOSE>
<P></P><iframe src="https://players.brightcove.net/6058004218001/default_default/index.html?videoId=6352215904112" width="960" height="540" allowfullscreen allow="encrypted-media"></iframe>Looks like some rusty physics.<P></P>
Re: グラフ上で図形を制御して移動する方法を探していますこれは本当に素晴らしいですね。
これには何か用途があると思うので、実際に試してみて、どのように機能するかを見てみたいと思います。
私は現在、当初の問題に対してより受動的なアプローチを取ることに熱心ですが、Craige の例のように、時間の経過とともに形状の速度や加速度を制御できることに気づいていませんでした。
Re: グラフ上で図形を制御して移動する方法を探していますこれは本当に良さそうです。これこそ私が求めていたものだと思います。時間駆動できるところが本当に気に入っています。
次のようなより複雑な図面でもこれを機能させることは可能でしょうか。
塗りつぶし色(RGBカラー(255,0,0));
長方形(50、90、60、80、1)
塗りつぶし色(RGBカラー(204,0,0));
長方形(51、89、59、81、1)
塗りつぶし色(RGBカラー(255,0,0));
多角形 ( {59, 89}, {60, 90}, {50, 90}, {51, 89});
塗りつぶし色(RGBカラー(153,0,0));
多角形 ( {60, 80}, {59, 81}, {51, 81}, {50, 80});
跳ね返るのではなく、図形の底部が X 軸に当たったときに、図形を停止させて所定の位置に留まるようにしたいと思います。
また、一定の時間が経過すると、他の図形の描画が画面に表示され、同じ経路をたどり、それぞれが X 軸上に落ち着くようにしたいと思います。
送っていただいたスクリプトを試してみましたが、正しい方法で変更する方法がよくわかりませんでした。本当に賢いですね!!!
Re: グラフ上で図形を制御して移動する方法を探していますはい、できます。オブジェクトは硬い形状をしており、何らかの条件が満たされるとすぐに停止するようにしたいようです。徐々に減速したり変形したりするのではなく。また、時間の経過とともに解放される可能性のある複数のオブジェクトがあるようです。次のような列名を持つ、オブジェクトごとに 1 行のデータ テーブルを使用します。
Xpos Ypos Xvel Yvel XdeltaVel TdeltaVel IsActive IsDrawing Color Size Shape
次に、UpdateRow( 行番号、 deltaTime ) と DrawRow( 行番号 ) の 2 つの関数を記述します。UpdateRow は次のようになります (テストされていませんが、ほぼ正しいです...)。
UpdateRow = function({rowNumber, deltaTime}
if( dtQ:isActive[rowNumber],
dtQ:Xpos[rowNumber] += dtQ:Xvel[rowNumber] * deltaTime;
dtQ:Ypos[rowNumber] += dtQ:Yvel[rowNumber] * deltaTime;
// you might want the velocity to change as well, possibly using the deltaVelocity,
// make sure the Xs and Ys stay together
// do a test to see if still active
if( dtQ:y[rowNumber] <= 0, // whatever condition makes it stop
dtQ:isActive[rowNumber] = 0;
dtQ:isDrawing[rowNumber] -= 1; // count down until vanishes
)
}
When you add a row to the table (dtQ, above, I tend to use dt for a table not delta time!) make sure to set the row's value for isActive to 1, and if you want the non-active objects to eventually expire, set the isDrawing to 100 or 1000 to control how many cycles go by before it stops drawing.
DrawRow 関数は次のようになります。
DrawRow = function({RowNumber},
if( dtQ:isDrawing[RowNumber],
// your code goes here. Add the dtQ:Xpos[RowNumber] to your X coords
// and same for Ypos/Y.
// .... use the color/size/shape values from the row if you find them useful
)
);
これで、グラフィックス スクリプトは dtQ 上のループのペアになります。最初のループは更新を適用し、2 番目のループは描画を行います。これらを分離しておく必要はありませんが、後で衝突を処理することにした場合に役立つことがあります。
この例では、dtQ のデータ テーブルは、xpos、ypos、色、サイズ、形状の値をプロットすることでグラフ ビルダーで表示することもできます。GraphBuilder は自動的に更新されるため、DrawRow 関数は必要ありません。私は使用したことはありませんが、ポイント用のカスタム形状描画メカニズムがあると思います。
インタラクティブなリアルタイム表示ではなく、ビデオを作成しようとしている場合は、30 または 60 FPS に設定し、フレーム間のデルタ時間を一定にします。上記では、自分のマシンで機能する数値を選択しました。ただし、1/30 を選択して番号付きの画像のセットを作成すると、非常にスムーズなビデオが作成されます。