2012-01-13 25 views
6

私は関数test []を作成しました。これは必要であれば記号テストでもあり、私はそれを操作で実装しようとしています。このようなテスト[]ルックスは:MathematicaのManipulate []のカスタムコントローラー

test[]:=Button["Label",Functionality[]]; 

これは操作し、[]で直接使用する場合はエラーを返しますが、それは動的または評価に包まれている場合に動作します。

Manipulate[content,test[]]; 

操作する:: vsform:引数のテストは、[]変数指定のための正しいフォームを持っていません操作します。

Manipulate[content,Dynamic[test[]]] 

この1つは

Manipulate[content,Evaluate[test]] 

この作品ながら、テストはこれが私のMac上で動作する機能

Manipulate[content,Evaluate[test[]]] 

はないことに注意してください、しかし、仕事ではない、私のPCで動作します。 ..

私は問題がManipulate Hと関係があると思いますoldAllだが、Dynamic []がこれを修正する理由を理解していない。また、Evaluate []は時間の一部しか動作しません。

Dynamic []またはEvaluate []はなぜ必要なのですか?高度な操作チュートリアルのカスタムコントローラーのセクションを見ると、この問題への参照はなく、他の場所は見つかりませんでした。

+3

あなたはコピーして貼り付けることができる、完璧な自己完結型の作業コードを投稿できますか?あなたがそこに示すすべての定義を含む?問題を示す小さな例を作ってください。ここからの1行を表示すると、定義されていないシンボルが表示され、あなたを助けるのが難しくなります。私はあなたのために働いていることが実際に働くことができるか見ていません。しかし、あなたは完全なコードを表示していないので、何か他のことが起こっている可能性があります。 – Nasser

答えて

8

別のtest[]機能を使用する代わりに、Buttonをインライン化することができます。それ以外の場合、最後の例はManipulate[content,Evaluate[test[]]]です。です。私のマシンのMathematica 8のボタンを表示します。プラットフォーム(WindowsまたはMac)に違いはありません。

Manipulateがデフォルトで提供するものとは十分に異なるものを実行している場合は、Dynamic(これは私が通常行うことです)を使用してゼロから構築する方が便利かもしれません。


ここでは、コントローラとしていくつかのボタンを含める方法の例を示します。

Manipulateの内側に表示するものを設定するまず、:

rotate90[{x_, y_}] := {-y, x} 

koch[p1_, p2_, n_] := {koch[p1, p1 + (p2 - p1)/3, n - 1], 
    koch[p1 + (p2 - p1)/3, (p1 + p2)/2 + Sqrt[3]/6 rotate90[p2 - p1], 
    n - 1], koch[(p1 + p2)/2 + Sqrt[3]/6 rotate90[p2 - p1], 
    p2 - (p2 - p1)/3, n - 1], koch[p2 - (p2 - p1)/3, p2, n - 1]} 

koch[p1_, p2_, 0] := Line[{p1, p2}] 

snowflake[n_] := 
Graphics[{koch[{0, 0}, {1, 0}, n], 
    koch[{1, 0}, {1/2, -Sqrt[3]/2}, n], 
    koch[{1/2, -Sqrt[3]/2}, {0, 0}, n]}] 

その後Manipulate自体を設定します。

Manipulate[snowflake[n], {{n, 2}, ControlType -> None}, 
Style["A Koch snowflake", Bold], Delimiter, 
Row[{Button["+", n++], Button["-", n = Max[n - 1, 0]]}]] 

Mathematica graphics


はここで、このを示す例ですButtonは別の関数で定義されています

SetAttributes[paletteButton, HoldRest] 
paletteButton[name_, func_] := 
Button[name, func, Appearance -> "Palette"] 

Manipulate[snowflake[n], {{n, 2}, ControlType -> None}, 
Style["A Koch snowflake", Bold], Delimiter, 
[email protected]["+", n++]] 

あなたはあなたの質問で述べたように、ここではインラインButtonを得ることがEvaluateで関数をラップする必要があります。そうでなければManipulateは、の制御であり、の変数ではないことに気付くことができません。

関連する問題