我需要帮助。我有很多变量,我在我的Graphics[]
命令中使用,这些变量依赖于一个变量(在我的示例中为H)。我想操作我的图形,以便通过相应地更改H图形更改的值。但这并不像我想象的那么容易。在mathematica中调整操作输出
如果您对如何实现这一点有任何想法,我将不胜感激。
(*This variables are dependent on H that I want to change in
manipulate*)
R = 10;
\[Alpha] = ArcSin[H/R];
p = H/Tan[\[Alpha]];
n = 1.5;
\[Beta] = ArcSin[n Sin[\[Alpha]]];
\[Theta] = \[Beta] - \[Alpha];
l = H/Tan[\[Theta]];
(*This is the graphic I want to make manipulated*)
Graphics[{(*Incident ray*)Line[{{-2, H}, {p, H}}],(*Prism*)
Circle[{0, 0}, R, {0, Pi/2}],
Line[{{0, 0}, {0, 10}}],(*Refracted ray*)
Line[{{p, H}, {p + l, 0}}],(*Surface*)
Line[{{0, 0}, {p + l + 10, 0}}]}]
这是我的解决方案之一,但它真的很混乱。我所做的只是手动插入这些值。有没有更合适的方式来acomplish此:
R = 10;
n = 1.5;
Manipulate[
Graphics[{(*Incident ray*)
Line[{{-2, H}, {H/Tan[ArcSin[H/10]], H}}],(*Prism*)
Circle[{0, 0}, R, {0, Pi/2}],
Line[{{0, 0}, {0, 10}}],(*Refracted ray*)
Line[{{H/Tan[ArcSin[H/10]],
H}, {H/Tan[ArcSin[H/10]] +
H/Tan[ArcSin[n Sin[ArcSin[H/10]]] - ArcSin[H/10]],
0}}],(*Surface*)
Line[{{0,
0}, {H/Tan[ArcSin[H/10]] +
H/Tan[ArcSin[n Sin[ArcSin[H/10]]] - ArcSin[H/10]] + 10,
0}}]}], {H, 0.0001, 10, Appearance -> "Labeled"}]
,以及如何让我的图形不改变它的大小不断。我希望棱镜具有固定的尺寸和入射光线来改变它的位置(因为当我在上面的例子中,H得到大于6.66 /这个解决方案时)。
这个问题可能令人困惑,但如果你在Mathematica中试用它,你会看到我想要的。谢谢你的任何建议。
顺便说一句,我从你的代码中移除了几条固定的行 - 很容易把它们放回去。 – 2012-01-14 18:47:27
我没有仔细看过,但似乎有一个小错误。 “长度”滑块不会停在'10/n'处。如果你经过它,它会回落到0.0001。同样,如果增加“折射”滑块以使长度> 10/n,则长度回到0,但滑块可自由移动。我知道它的物理原理以及它为什么会发生,但是如果滑块停止,可能会更好,而不是自动重置/移动。在任何情况下,欢迎堆栈溢出,并感谢提交的建议:) – abcd 2012-01-14 20:07:30
感谢您指出了这一点,尤达和感谢的热烈欢迎。我调整了一下代码。 – 2012-01-14 20:31:44