Я думаю, что ваше решение в целом неплохое, Марк уже заметил в своем ответе. Мне тоже понравилась простота решения Марка. Ради эксперимента я тоже делюсь своими идеями.
1) Хорошо бы локализовать ваши переменные для конкретного манипулятора, чтобы их значения не просачивались и не мешали другому динамическому контенту. Имеет значение, если у вас есть дополнительные вычисления в вашей записной книжке - они могут начать сбрасывать друг друга.
2) В этом конкретном случае, если вы пытаетесь прочитать дополнительные переменные, вставляя выражения одно в другое, ваши уравнения усложняются, и трудно понять, почему они иногда терпели неудачу. Немного алгебры с помощью функций TrigExpand и FullSimplify может помочь прояснить, что ваша переменная H имеет ограничения в зависимости от значения n показателя преломления (см. Ниже).
3) Если нам известна точка (2), мы также можем сделать переменную n динамической и связать значение H с n (сброс верхней границы H) прямо в определении элементов управления, поэтому всегда должно быть H <10 / п. Если [..] также необходимо, чтобы элементы управления не были «розовыми». </p>
4) Если ваши формулы будут зависеть от R, мы также можем сделать R динамическим. Но у меня нет этой информации, поэтому я локализовал R через концепцию «фиктивного» элемента управления (ControlType -> None), что является весьма полезным понятием для Manipulate.
5) Используйте PlotRange и ImageSize, чтобы остановить покачивание графики
6) Сделай это красиво; -)
Эти пункты будут важны, если вы хотите, например, подать Демонстрацию в Демонстрационный проект Вольфрама. Если вы просто играете - я думаю, что ваши решения и решения Марка очень хорошие.
Спасибо,
Виталий
Manipulate[If[H >= 10/n, H = 10/n - .0001]; Graphics[{
{Red, Thick, Line[{{-2, H}, {Sqrt[100 - H^2], H}}]},
{Blue, Opacity[.5], Disk[{0, 0}, R, {0, Pi/2}]},
{Red, Thick, Line[{{Sqrt[100 - H^2], H},
{(100 n)/(Sqrt[100 - H^2] n - Sqrt[100 - H^2 n^2]), 0}}]}},
Axes -> True, PlotRange -> {{0, 30}, {0, 10}},
ImageSize -> {600, 200}], {{R, 10}, ControlType -> None},
{{n, 1.5, "Refraction"}, 1.001, 2, Appearance -> "Labeled"},
{{H, 3, "Length"}, 0.0001, 10/n - .0001, Appearance -> "Labeled"}]