|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.05.2012, 18:35 | #1 | |
Пользователь
Регистрация: 01.04.2011
Сообщений: 13
|
Дисперсия на призме
Добрый день уважаемые участники форума.
Пытаюсь написать программу на делфи чтобы была хоть чуток видна дисперсия. Хочу сделать по простому из одной точки пустить по очереди 7 лучей разных цветов, и чтобы на выходе из призмы получилось что-то типо радуги. Примерно вот так: Проблема у меня состоит в том, что я никак не могу понять как вычисляется коэффициент преломления от длины волны. Нашел формулу: Цитата:
|
|
25.05.2012, 23:16 | #2 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,309
|
Думаю, что можно так:
Найти таблицу зависимости показателя преломления от длинны волны, например тут: http://www.dpva.info/Guide/GuidePhys...eOfwaveLength/ Затем, выбрав степень приближения, составить и решить систему уравнений, для нахождения коэффициентов a, b, c, ... Материал и угол призмы так же должны быть определены. Думаю, что так можно ...
Как-то так, ...
|
26.05.2012, 23:02 | #3 |
Пользователь
Регистрация: 01.04.2011
Сообщений: 13
|
Коэффициенты A и B нашел:
A=1.504 B=4.568*10^3 Теперь если подставлять в эту формулу Коши длины волн, то находятся нужные нам преломления, но теперь у меня другая проблема, как это нарисовать в делфи, делал по тупому для каждого из 7 лучей указывал своё преломление и свою процедуру рисования, но преподаватель сказал, а что если мы захотим сделать спектр из 200 лучей, то для каждого луча тоже будем высчитывать преломление? У меня в мыслях было пару идей, но реализовать их что-то не получается... Первая мысль - это масив, но с ними я не дружу. Вторая мысль - цикл с переменной, за значения цикла взять длину волны скажем Код:
Вот код, который умеет рисовать линию через призму по закону преломления Код:
Последний раз редактировалось OPEJI; 26.05.2012 в 23:09. |
26.05.2012, 23:19 | #4 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Что-то не понял, где в Вашей программе задается коэффициент преломления.
И еще: на основе чего ShowLines что-то рисует? Обычно все необходимые параметры передаются в процедуру через параметры. У Вас параметры отсутствуют, а глобальные переменные не описаны. |
26.05.2012, 23:30 | #5 | |
Пользователь
Регистрация: 01.04.2011
Сообщений: 13
|
Цитата:
Код:
На основании этой функции рисуется сама призма процедурой(эта процедура просто визуальное оформление) Код:
|
|
26.05.2012, 23:41 | #6 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
А что за параметры у функции fn1?
И еще я спросил насчет ShowLines - что она рисует и на основе каких данных? |
27.05.2012, 00:02 | #7 | |
Пользователь
Регистрация: 01.04.2011
Сообщений: 13
|
Код:
(y>400)or(y<-300+1.71*x)or(y<600-1.71*x) вот этими условиями на координатной плоскости создается невидимая призма fn1:=1 fn1:=1.5 это коэффициенты преломления, 1 это вне призмы, то есть "воздух", 1.5 это внутри призмы, то есть "стекло" Цитата:
Код:
Далее в цикле: Высчитываются радиусы сферических волн(с - скорость света в вакууме, fn1(x1,y1) - коэффициент преломления в данных точках, пока луч летит в "воздухе" он равен 1, когда луч влетает в призму он стает равным 1.5, вылетает из призмы и стает опять равным 1, dt-квант времени для точности модели Далее вычисляются углы, пока мы летим в воздухе угол равен 0, как только луч сталкивается с призмой коэффициент преломления изменяется и угол луча соответственно изменяется Далее вычисляются координаты движения луча, т.е. он высчитывает по какой траектории должен лететь луч... |
|
27.05.2012, 00:20 | #8 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Алгоритм вычисления так до конца и не понял. Но попытаюсь предложить, куда внести изменение коэффициента преломления.
Если не пытаться изменить стиль Вашей программы, то коэффициент преломления целесообразно хранить в глобальной переменной и в функции fn1 вместо константы 1.5 подставлять значение этой переменной. Т.е. в TForm1.Button1Click задаете длину волны и по ней вычисляете коэффициент преломления. Если нужно - задаете разные значения длины волны в цикле. Только правильно согласуйте величину B с размерностью длины волны. Потому как задана она явно не в СИ. |
27.05.2012, 00:21 | #9 |
Пользователь
Регистрация: 01.04.2011
Сообщений: 13
|
Спасибо, попробую...
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Дисперсия | tema654 | Microsoft Office Excel | 3 | 15.12.2011 14:28 |
В прямой четырехугольной призме провести сечение, проходящее через сторону нижнего основания под углом 30 | ramp1 | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 04.06.2011 10:39 |
Дисперсия | CesaR_JC | Помощь студентам | 15 | 23.05.2010 01:48 |
Дисперсия. Гистограмма | p4serhiy | Помощь студентам | 2 | 15.04.2010 08:34 |
дисперсия массивов | And_DaviD | Общие вопросы C/C++ | 3 | 16.02.2010 19:45 |