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

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.01.2006, 19:03
K.A.T.A.F.A.L.K.E.R вне форума Посмотреть профиль Отправить личное сообщение для K.A.T.A.F.A.L.K.E.R Найти все сообщения от K.A.T.A.F.A.L.K.E.R
  № 1  
Ответить с цитированием
K.A.T.A.F.A.L.K.E.R
 
Аватар для K.A.T.A.F.A.L.K.E.R

Регистрация: Jul 2005
Адрес: Go, Ukraine!
Сообщений: 787
Отправить сообщение для K.A.T.A.F.A.L.K.E.R с помощью ICQ
По умолчанию Интерполирование

Всем, кого достали кривые Безье, посвящается... Написано коряво, но более-менее работает

Код HTML:
MovieClip.prototype.drawBezier = function(POINTS){
	ANGLE = new Array();
	for(i_=0;i_<POINTS.length;i_++){
		cPx = POINTS[i_].x;
		cPy = POINTS[i_].y;
		if(POINTS[i_+1]!=undefined){
			cPNx = POINTS[i_+1].x;
			cPNy = POINTS[i_+1].y;
		} else{
			cPNx = POINTS[i_].x;
			cPNy = POINTS[i_].y;
		}
		if(POINTS[i_-1]!=undefined){
			cPPx = POINTS[i_-1].x;
			cPPy = POINTS[i_-1].y;
		} else{
			cPPx = POINTS[i_].x;
			cPPy = POINTS[i_].y;
		}
		
		Points = [{x:cPPx,y:cPPy},{x:cPx,y:cPy},{x:cPNx,y:cPNy}];
		
		d1 = Math.sqrt(Math.pow(Points[0].x - Points[1].x,2) + Math.pow(Points[0].y - Points[1].y,2));
		d2 = Math.sqrt(Math.pow(Points[2].x - Points[1].x,2) + Math.pow(Points[2].y - Points[1].y,2));
		
		if(d2!=0){
			xc = Points[1].x + (d1/d2)*(Points[2].x-Points[1].x);
			yc = Points[1].y + (d1/d2)*(Points[2].y-Points[1].y);
		} else {
			xc = Points[1].x;
			yc = Points[1].y;
		}
		
		angle = Math.atan2(yc - Points[0].y,xc - Points[0].x);
		ANGLE.push(angle);
	}

	for(i_=0;i_<POINTS.length-1;i_++){
		cPx = POINTS[i_].x;
		cPy = POINTS[i_].y;
		if(POINTS[i_+1]!=undefined){
			cPNx = POINTS[i_+1].x;
			cPNy = POINTS[i_+1].y;
		} else{
			cPNx = POINTS[i_].x;
			cPNy = POINTS[i_].y;
		}
		if(POINTS[i_-1]!=undefined){
			cPPx = POINTS[i_-1].x;
			cPPy = POINTS[i_-1].y;
		} else{
			cPPx = POINTS[i_].x;
			cPPy = POINTS[i_].y;
		}
		rad = Math.sqrt(Math.pow(cPx - cPNx,2)+Math.pow(cPy - cPNy,2))/5;
		Points = [{x:cPPx,y:cPPy},{x:cPx,y:cPy},{x:cPNx,y:cPNy}];
		
		C1x = Points[1].x + rad*Math.cos(ANGLE[i_]);
		C2x = cPNx - rad*Math.cos(ANGLE[i_+1]);
		C1y = Points[1].y + rad*Math.sin(ANGLE[i_]);
		C2y = cPNy - rad*Math.sin(ANGLE[i_+1]);
		
		t = 0;
		this.moveTo(cPx,cPy);
		while(t<1){
			t+=0.01;
			coeff1 = Math.pow(1-t,3);
			coeff2 = 3*Math.pow(1-t,2)*t;
			coeff3 = 3*(1-t)*Math.pow(t,2);
			coeff4 = Math.pow(t,3);
			rx = coeff1*cPx+coeff2*C1x+coeff3*C2x+coeff4*cPNx;
			ry = coeff1*cPy+coeff2*C1y+coeff3*C2y+coeff4*cPNy;
			this.lineTo(rx,ry);
		}
	}
	this.lineStyle(5,0x3366CC,100);
	for(i_=0;i_<POINTS.length;i_++){
		this.moveTo(POINTS[i_].x,POINTS[i_].y);
		this.lineTo(POINTS[i_].x+1,POINTS[i_].y);
	}
}
_root.onMouseUp = function(){
	_root.createEmptyMovieClip("lc",1);
	L = new Array();
	for(i=0;i<10;i++)
		L.push({x:Math.random()*550,y:Math.random()*400});
	_root["lc"].lineStyle(1,0x707070,100);
	_root["lc"].drawBezier(L);
}
Прикол в отсутствии касательных и проочего - интерполирование, мля

Старый 03.01.2006, 21:22
Ion вне форума Посмотреть профиль Найти все сообщения от Ion
  № 2  
Ответить с цитированием
Ion
Banned
[5 01.09.2006]

Регистрация: Jun 2005
Сообщений: 1,805
Как оно работает?

Старый 03.01.2006, 21:50
K.A.T.A.F.A.L.K.E.R вне форума Посмотреть профиль Отправить личное сообщение для K.A.T.A.F.A.L.K.E.R Найти все сообщения от K.A.T.A.F.A.L.K.E.R
  № 3  
Ответить с цитированием
K.A.T.A.F.A.L.K.E.R
 
Аватар для K.A.T.A.F.A.L.K.E.R

Регистрация: Jul 2005
Адрес: Go, Ukraine!
Сообщений: 787
Отправить сообщение для K.A.T.A.F.A.L.K.E.R с помощью ICQ
Кучу точек соединяет кривой... У меня ушло довольно много времени на борьбу с тригонометрией флеша чтоб сделать это - вот и подумал, что может кому понадобится...

Старый 03.01.2006, 22:17
Ion вне форума Посмотреть профиль Найти все сообщения от Ion
  № 4  
Ответить с цитированием
Ion
Banned
[5 01.09.2006]

Регистрация: Jun 2005
Сообщений: 1,805
А кучу точек он откуда берет?

Старый 04.01.2006, 00:25
Madasan вне форума Посмотреть профиль Отправить личное сообщение для Madasan Найти все сообщения от Madasan
  № 5  
Ответить с цитированием
Madasan
 
Аватар для Madasan

Регистрация: Jun 2005
Адрес: в Питере
Сообщений: 981
Цитата:
Сообщение от K.A.T.A.F.A.L.K.E.R
Кучу точек соединяет кривой... У меня ушло довольно много времени на борьбу с тригонометрией флеша чтоб сделать это - вот и подумал, что может кому понадобится...
Если подключить Path? Или эта штука по другому работает?
__________________
Делай всё быстро, но не торопись!.._/*o|o*\_.

Старый 04.01.2006, 01:03
K.A.T.A.F.A.L.K.E.R вне форума Посмотреть профиль Отправить личное сообщение для K.A.T.A.F.A.L.K.E.R Найти все сообщения от K.A.T.A.F.A.L.K.E.R
  № 6  
Ответить с цитированием
K.A.T.A.F.A.L.K.E.R
 
Аватар для K.A.T.A.F.A.L.K.E.R

Регистрация: Jul 2005
Адрес: Go, Ukraine!
Сообщений: 787
Отправить сообщение для K.A.T.A.F.A.L.K.E.R с помощью ICQ
Цитата:
Сообщение от Madasan
Если подключить Path? Или эта штука по другому работает?
Та вроде совсем не похоже... Воопсчем, обрисовываю ситуацию, для чего я это делал... Задача такая: чарты. Есть набор значений, и стандартный тип чарта - линия. Линия соединяет эти значения. Но возможен вариант когда линия должна быть плавной - вот тут и пришлось долбаться. Нужно было интерполировать. Все существующие методы были слишком сложными. Самый подходящий для этого метод - метод интерполяции сплайнами. То что я предложил - и есть он самый, но flash edition Короче говоря. В маткаде графики по точкам строили? Плавную кривую получали? Вот это оно.
P.S. можно юзать для ландшафтов в играх
P.P.S. по поводу Path-а... Если он все же это умеет... Дайте сцылу!!! Я напьюсь с горя - столько времени убил...

Старый 04.01.2006, 02:24
Madasan вне форума Посмотреть профиль Отправить личное сообщение для Madasan Найти все сообщения от Madasan
  № 7  
Ответить с цитированием
Madasan
 
Аватар для Madasan

Регистрация: Jun 2005
Адрес: в Питере
Сообщений: 981
Цитата:
по поводу Path-а... Если он все же это умеет... Дайте сцылу!!!
Мне казалось что Path то же самое делает, ...или его можно подключить, чтобы получать массив точек?
__________________
Делай всё быстро, но не торопись!.._/*o|o*\_.

Старый 04.01.2006, 17:49
Ion вне форума Посмотреть профиль Найти все сообщения от Ion
  № 8  
Ответить с цитированием
Ion
Banned
[5 01.09.2006]

Регистрация: Jun 2005
Сообщений: 1,805
Цитата:
Сообщение от Fl_ash_er
Привет всем! Я тут впервые, и возможно вопрос не по теме: как можно сделать чтоб Flash-мульт воиспроизводил DVD-проигрыватель???
х!"в флудер, шоп тя забанили

Старый 04.01.2006, 17:59
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 9  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Есть ИНТЕРПОЛЯЦИЯ и АППРОКСИМАЦИЯ
Интерполяция - это построение кривой, проходящей через контрольные точки.
Аппроксимация - это построение кривой, проходящей не обязательно через контрольные точки, но их учитывая.
Подробнее здесь http://www.fit.com.ru/Surveys/Course/Lecture_04.doc

Методы постройки различные.
Можно наглядно посмотреть здесь http://ibiblio.org/e-notes/Splines/Intro.htm
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 04.01.2006, 18:35
K.A.T.A.F.A.L.K.E.R вне форума Посмотреть профиль Отправить личное сообщение для K.A.T.A.F.A.L.K.E.R Найти все сообщения от K.A.T.A.F.A.L.K.E.R
  № 10  
Ответить с цитированием
K.A.T.A.F.A.L.K.E.R
 
Аватар для K.A.T.A.F.A.L.K.E.R

Регистрация: Jul 2005
Адрес: Go, Ukraine!
Сообщений: 787
Отправить сообщение для K.A.T.A.F.A.L.K.E.R с помощью ICQ
Цитата:
Сообщение от iNils
Есть ИНТЕРПОЛЯЦИЯ и АППРОКСИМАЦИЯ
Интерполяция - это построение кривой, проходящей через контрольные точки.
Аппроксимация - это построение кривой, проходящей не обязательно через контрольные точки, но их учитывая.
Вот и я о том. То, что умеет флеш, или то, чем являются кривые Безье - это второе

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

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

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


 


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


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