2

離散ベクトル フィールドを連続ベクトル フィールドに補間できる Mathematica スクリプトを作成しようとしています。次に、連続ベクトル場から積分曲線 (磁力線) を抽出します。

ListStreamPlotMathematica の関数が積分曲線を視覚的に表示できることは知っています.ただし、それらを構成する実際のポイントが必要です。

私は、次の効果を持つ力ずくの方法を書くことを考えました: 積分曲線は再帰的に決定できるようです。リストでポイントが選択された場合、積分曲線の「次の」ポイントは、最も近い勾配を持つポイントになります。(各「ポイント」は実際にはベクトルであるため、それぞれに独自の勾配があります。)「次の」ポイントの候補は、現在のポイントの上、下、左、または右の 4 つだけです。「次の」点が新しい開始点になり、グリッドの端に到達するまでプロセスが繰り返されます。

しかし、Mathematica の上位関数を使ったもっと簡単な方法はないのでしょうか。(私の方法が概念的に正しいかどうかもわかりません。)

このタスクに関するご意見やご提案をいただければ幸いです。

ありがとう!

4

1 に答える 1

3

参考までに: http://mathematica.stackexchange.com

いくつかのデータを作成します。

data = Table[{-1 - x^2 + y, 1 + x - y^2}, {x, -3, 3, 0.2}, {y, -3, 3, 0.2}];

を建てるListStreamPlot

plot = ListStreamPlot[data, 
          StreamStyle -> "Line", Frame -> False, PlotRangePadding -> 0]

ここに画像の説明を入力

Mathematica ではすべてが式なので、このプロットも基本的にはグラフィックス プリミティブの視覚化されたコードです。これらのプリミティブ (必要な行を含む) は、さまざまな方法で抽出できます。たとえば、式の一部を選択するだけで、このプロットを構成するすべてのポイントを見つけることができます。

points = plot[[1, 2, 1]];

式全体を確認する必要がある場合は、を評価しplot//InputFormます。これで、パターン マッチングを実行して式の内部を確認することもできます。すべての行を構成するすべてのインデックスを見つけます。

indexes = Cases[plot, Line[index_] -> index, Infinity];

これで、線を分析、描画、スタイル設定するためのすべてが揃いました。たとえば、元のプロットの特定の行を強調表示するアプリを設計します。

Animate[Show[
  plot,
  Graphics[{Red, Opacity[.5], , Thickness[.02], 
    Line[points[[indexes[[k]]]]]}]]
 , {{k, 1, "lines"}, 1, Length[indexes], 1}, FrameMargins -> 0]

ここに画像の説明を入力

于 2013-01-22T03:35:59.010 に答える