Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.06.2012, 00:00
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 11  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
f - фокусное расстояние. у Вас это CF. a - расстояние от объекта до линзы, соответственно SA. b - искомое расстояние до полученного изображение, соответственно CE. (Обычно вместо C пишут 0).
По вертикали:
Цитата:
если координата источник y, то y' = -y*f/a

Старый 11.06.2012, 14:04
Erikozer вне форума Посмотреть профиль Отправить личное сообщение для Erikozer Найти все сообщения от Erikozer
  № 12  
Ответить с цитированием
Erikozer

Регистрация: 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);
Прибавляем 173 к yf, потому что началом координат будет считаться центр линзы.


Последний раз редактировалось Erikozer; 11.06.2012 в 15:00.
Старый 11.06.2012, 16:53
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 13  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
я писал на память - где-то мог и ошибиться (особенно не отвечаю за знаки). Но гугл на что? Я просто подсказал, кдуа копать.
Тем более, на рисунках очевидна ошибка! На первом расстояние между изображением и ГОО меньше расстояния от источника до ГОО, а на втором рисунке нет, хотя источник одинаково удален от лизны. Следовательно смена знака тут влечет еще и изменене модуля? Вам не кажется, что так не должно быть? ABS(-173.568) == ABS(173.568);

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

Регистрация: Jun 2012
Сообщений: 6
Ладно, забил пока на подсчеты, делаю через поворот. За 2 часа сделал то, над чем бился 2 дня.
Думаю с выездом на панель настроек разберусь, но через что побыстрее ограничить линии, чтобы они не выползали за объект слева, если точки пересекаются справа от линзы и аналогично для пересечения слева?
Я правильно понимаю, что нужно сделать маску, в которой не будут видны определенные объекты и размещаться она должна в координатах нашей точки?
Точку пересечения буду искать через уравнения двух прямых, намного проще.
[IMG]http://tau.**********/38603010/image.png[/IMG]


Последний раз редактировалось Erikozer; 11.06.2012 в 17:22.
Старый 11.06.2012, 17:36
XoJlToH вне форума Посмотреть профиль Отправить личное сообщение для XoJlToH Найти все сообщения от XoJlToH
  № 15  
Ответить с цитированием
XoJlToH
 
Аватар для XoJlToH

Регистрация: Sep 2006
Сообщений: 145
как то так. применять на контйенер, в котором вы рисуете линии
Код AS3:
var mask_sprite:Sprite = new Sprite();
mask_sprite.graphics.beginFill(0x00ff00, 1);
mask_sprite.graphics.drawRect(0, 0, your_width, your_height);
mask_sprite.graphics.endFill();
your_movieClip.addChild(mask_sprite);
your_movieClip.mask = mask_sprite;

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:40.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:40.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.