![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
f - фокусное расстояние. у Вас это CF. a - расстояние от объекта до линзы, соответственно SA. b - искомое расстояние до полученного изображение, соответственно CE. (Обычно вместо C пишут 0).
По вертикали: Цитата:
|
|
|||||
|
Регистрация: Jun 2012
Сообщений: 6
|
Никак не получается, перепробовал все варианты, линии ведут себя неадекватно и не идут строго через фокус/центр линзы.
Вот что выходит, если делать через y' = -y*f/a. Слева с минусом, справа без. Без минуса получается более менее, но линии все равно преломляются при выходе из центра или фокуса. [IMG]http://plasmon.**********/38600330/image.png[/IMG] Ну и код: Центр линзы (275,173) Фокус справа (348,173) buildbutton.addEventListener(MouseEvent.CLICK, Draw );
var v:Number;
var u:Number;
var k:Number;
var f:Number = 73; // расстояние от линзы до фокуса
var yf:Number;
var ydtop:Number;
function Draw( e:MouseEvent ):void
{
buildlines.graphics.clear();
buildlines.graphics.lineStyle(2, 0xff0000, .75);
initposx = ourobject.x;
initposy = ourobject.y;
u = 275-initposx; // расстояние от объекта до линзы
v = (f*u)/(u-f); // расстояние от линзы до изображения
k = v/u;
ydtop = initposy-((sizeSlider.value-10)/2);
yf = (ydtop*f/u);
trace(u,v,k,initposy);
// 1/f=1/a+1/b
//Строим от верхней точки объекта параллельную линию и через фокус
buildlines.graphics.moveTo(initposx, ydtop);
buildlines.graphics.lineTo(275,ydtop);
buildlines.graphics.lineTo(348,173);
buildlines.graphics.lineTo(275+v,yf+173);
//Строим от верхней точки объекта линию через центр
buildlines.graphics.moveTo(initposx, ydtop);
buildlines.graphics.lineTo(275,173);
buildlines.graphics.lineTo(275+v,yf+173);
Последний раз редактировалось Erikozer; 11.06.2012 в 15:00. |
|
|||||
|
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
я писал на память - где-то мог и ошибиться (особенно не отвечаю за знаки). Но гугл на что? Я просто подсказал, кдуа копать.
Тем более, на рисунках очевидна ошибка! На первом расстояние между изображением и ГОО меньше расстояния от источника до ГОО, а на втором рисунке нет, хотя источник одинаково удален от лизны. Следовательно смена знака тут влечет еще и изменене модуля? Вам не кажется, что так не должно быть? ABS(-173.568) == ABS(173.568); |
|
|||||
|
Регистрация: Jun 2012
Сообщений: 6
|
Ладно, забил пока на подсчеты, делаю через поворот. За 2 часа сделал то, над чем бился 2 дня.
Думаю с выездом на панель настроек разберусь, но через что побыстрее ограничить линии, чтобы они не выползали за объект слева, если точки пересекаются справа от линзы и аналогично для пересечения слева? Я правильно понимаю, что нужно сделать маску, в которой не будут видны определенные объекты и размещаться она должна в координатах нашей точки? Точку пересечения буду искать через уравнения двух прямых, намного проще. [IMG]http://tau.**********/38603010/image.png[/IMG] Последний раз редактировалось Erikozer; 11.06.2012 в 17:22. |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 145
|
как то так. применять на контйенер, в котором вы рисуете линии
|
![]() |
![]() |
Часовой пояс GMT +4, время: 18:40. |
|
|
« Предыдущая тема | Следующая тема » |
|
|