Мне нужна помощь. У меня много переменных, которые я использую в моей команде Graphics[]
, которые зависят от одной переменной (H в моем примере). Я хочу манипулировать своей графикой, чтобы соответственно изменить значение H графических изменений. Но это не так просто, как я думал.Регулировка выходного сигнала управления в математике
Если у вас есть представление о том, как это сделать, я был бы вам признателен.
(*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, вы увидите то, что я хочу. Благодарим вас за любые предложения.
Кстати, я удалил несколько неподвижных линий из вашего кода - их легко вернуть. –
Я не просмотрел подробно, но, похоже, есть небольшая ошибка. Ползунок «Длина» не останавливается на '10/n'. Если вы пройдете мимо него, он вернется к 0,0001. Точно так же, если вы увеличите ползунок «Преломление» так, чтобы длина> '10/n', тогда длина вернется к 0, но ползунок свободен для перемещения. Я знаю физику и почему это происходит, но лучше было бы, если бы ползунок остановился, вместо того, чтобы свободно переключаться/перемещаться. В любом случае, добро пожаловать в «Переполнение стека» и спасибо за то, что он принял предложение :) – abcd
Спасибо, что указали это, Йода, и спасибо за теплый прием. Я немного скорректировал код. –