Показать сообщение отдельно
Старый 09.06.2012, 15:11
Erikozer вне форума Посмотреть профиль Отправить личное сообщение для Erikozer Найти все сообщения от Erikozer
  № 1  
Ответить с цитированием
Erikozer

Регистрация: Jun 2012
Сообщений: 6
Tools Геометрическая оптика

Здравствуйте. Вот уже третий день мучаюсь с построением изображения в собирающей линзе.
Есть точка, "оптический стол" и сама линза.
Нужно построить изображение по следующим правилам(я взял первые 2 правила, ибо третье кажется каким-то нереализуемым):
Цитата:
1.Луч, проходящий через оптический центр линзы, не преломляется.
2.Луч, падающий на линзу параллельно главной оптической оси, при выходе из линзы проходит через её фокус
3.Луч, падающий под углом на линзу, при выходе из линзы проходит через точку, лежащую в фокальной плоскости линзы. Эта точка является пересечением вспомогательного луча, параллельного главному лучу и проходящего через оптический центр линзы и перпендикуляра поднятого(или опущенного) из фокуса к главной оптической оси.
Второе предложение в третьем правиле вообще не понял.

Так вот, я столкнулся с большим количеством вариантов решения этой задачи и выбрал два из них:

1.Линии слева от линзы строить через graphics.moveTo и graphics.lineTo, благо координаты почти все есть, а именно нам известны(смотрим рисунок):
Координаты точек S, A, C, B(он же фокус)
Углы SAC, ACB, CED прямые
Проблема в том, что я незнаю, где пересекутся линии, идущие через фокус и через центр линзы.
Однако, погуглив я понял, что можно расчитать прирост по х и y каждой точки, например, отрезка АВ и таким образом продолжить строить после пересечения с фокусом. Аналогично для центра линзы.
Но я опять неузнаю, где они пересекутся.
[IMG]http://higgs.**********/38567218/image.png[/IMG]

2.Вторая идея мне пришла сегодня "во сне", после целого вечера поиска тригонометрических примеров на AS3.
А что если нарисовать две линии и сделать их мувиклипами. Они заменят линии AD и SD.
При нажатии на кнопку построения эти линии будут повернуты на необходимую величину(нужный градус можно вычислить, благодаря известным координатам).
Но тут опять загвоздка.
Через какую функцию узнать, что они пересеклись? hitTest? Но мне нужна точная координата, для помещения копии начальной точки туда.
И еще одна проблема: нужно, чтобы отрезок AD при любом повороте не выезжал на левую часть линзы. через что ограничить показ объекта в определенной области? Маски? Ниразу не работал с ними, подскажите какую функцию использовать.

Вопрос в том, какой способ проще и быстрее(ибо времени до сдачи диплома у меня мало).
Ах да, с AS работаю впервые.