Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [pascal] Преломление луча


Автор: Serious2008 6.3.2013, 14:53
Луч падает в жидкость в точке 300:300 коэффициент преломления в воздухе 1, в воде 1,33. После падения в жидкость угл меняется.
Дано: AC = 300, угол ABC 45 градусов
Коэффициент преломления 1,33
A1C1 = 300, найти C1B1
user posted image
По факту мне нужно сделать программу которая чертит всё это дело. Вот что у меня в данный момент есть.
Код

program luchi;
uses crt,GraphABC;
var
z,x:real;
 a, y,n :integer;
begin
setwindowsize(600,600);   {Устанавливаем размеры экрана 640/640 точек}
write('Введите углы в диапазоне (1-89) градус: ');{Выводим нужную надпись}
 read(a);{Вводим угл}
 SetPenColor(clLtGray); {Серый горизон рисуем}
 line(0,300,700,300);{Рисуем горизонт}
 SetPenColor(clGreen);{Меняем цвет на зелёный}
 floodfill(300,580,clLtGray);{Закрашиваем нижнюю область в серый цвет}
 line(300,0,300,640); {рисуем один перпендикуляр}
 y:=Trunc(300-300* sin(a*Pi/180) / cos(a*Pi/180)); {Считаем высоту через тангенс угла находим высоту,
 отняв от 300-та,мы узнаём точку откуда рисоват}
 x := sin(pi/180*a)/1.33; {синус угла падения}
z :=  Arctan(x/Sqrt(1-sqr(x)));{Сам угол находим}
  n:=Trunc(300* cos(z) / x); {Считаем высоту угла преломления,
 то же что и выше только с коэффициентом преломления 1.33,а добавляя к 300, мы опускаем наши координаты ниже}
  SetPenColor(clRed);      {цвета пера красный для двух лучей}
   line(300,300,0,y);      {Наш основной луч}
   line(300,300,600,y);{Луч отразившийся}

   SetPenColor(clYellow);{Меняем цвет пера на жёлтый}
   line(300,300,n,600);  {Рисуем отразившийся луч}
end.

Меня смущает, что когда ввожу 80, то получается вот такое.
user posted image

Автор: ФедосеевПавел 6.3.2013, 20:07
Может быть имеет место  полное внутреннее отражение (преломлённый луч отсутствует, падающий луч полностью отражается от границы раздела сред) - см. http://ru.wikipedia.org/wiki/Закон_Снеллиуса

Вот только рисунок там несколько иной, да и расчёты соответственно...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)