2012-01-13 1 views
6

필요한 경우 심볼 테스트가 될 수있는 함수 test []를 만들었습니다. 그리고이를 조작하여 구현하려고합니다. 이 같은 테스트 [] 외모 :Mathematica에서 Manipulate []에 대한 사용자 정의 컨트롤러

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

이것은 조작 []에 직접 사용하는 경우 오류를 반환하지만, 그것은 동적 또는 평가에 싸여 경우 작동합니다.

Manipulate[content,test[]]; 

조작 :: vsform : 인수 테스트 [] 변수 사양에 대한 올바른 양식이없는 조작 할 수 있습니다.

Manipulate[content,Dynamic[test[]]] 

이 사람은

Manipulate[content,Evaluate[test]] 

이 작동하는 동안, 시험이 내 Mac에서 작동하는 기능

Manipulate[content,Evaluate[test[]]] 

아니라는 것을 참고하지만, 직장에서 나의 PC를 작동합니다. ..

나는이 문제가 H와 조종하는 것과 관련이 있다고 생각한다. oldAll,하지만 왜 Dynamic []가이 문제를 해결해야하는지 이해할 수 없습니다. 또한 Evaluate []는 일부 시간에만 작동합니다.

따라서 Dynamic [] 또는 Evaluate []가 필요한 이유는 무엇입니까? 고급 조작 자습서의 사용자 지정 컨트롤러 섹션에서이 문제에 대한 참조를 볼 수 없으며 다른 곳을 찾을 수 없습니다.

+3

복사하여 붙여 넣기 할 수있는 완전한 자체 포함 작업 코드를 게시 할 수 있습니까? 거기에 보여준 모든 정의를 포함해서? 문제를 보여주는 작은 예를 만드십시오. 여기 저기에있는 한 줄을 표시하고 정의되지 않은 기호로 인해 당신을 도울 수 없습니다. 나는 네가하는 말을 실제로 어떻게 할 수 있는지 보지 못한다. 하지만 완전한 코드를 보여주지 않았으므로 다른 일이있을 수 있습니다. – Nasser

답변

8

별도의 test[] 기능을 사용하는 대신 Button을 인라인으로 연결할 수 있습니다. 그렇지 않다면 마지막 예제, Manipulate[content,Evaluate[test[]]], 입니다. 내 컴퓨터의 Mathematica 8 버튼을 보여줍니다. 플랫폼 (Windows 또는 Mac)에는 차이가 없어야합니다.

기본적으로 Manipulate이 제공하는 것과 다른 것을 수행하는 경우 Dynamic을 사용하여 처음부터 빌드하는 것이 더 편리 할 수 ​​있습니다. (이것은 일반적으로하는 일입니다).


다음은 컨트롤러로 일부 버튼을 포함시키는 방법의 예입니다. 여기


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

Mathematica graphics

는 예를 들어이 있음을 보여주는 것 : 그런 다음 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 내부 보여 줄게 설정경우에도 작동합니다.는 별도의 기능에 정의되어

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은 우리가 여기에있는 것은 제어 아닌 변수 것을 알 수 없습니다.

관련 문제