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

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > Action script 2.0

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

Регистрация: Jan 2004
Адрес: Калуга
Сообщений: 7
Question Построение сплайна

Проблема такая: нужно по траектории движения мышки построить гладенький сплайн. Т.е. нельзя взять и просто через все точки провести его, нужен какойто механизм, который уберет все лишние точки.
В общем-то это точ в точ повторяет инструмент Pencil когда выбираешь Smooth во Flash-e.
Только это должно быть в swf

Есть какие-нибудь алгоритмы?

Подскажите пожалуйста.

Старый 02.02.2004, 19:15
Dr.OH вне форума Посмотреть профиль Отправить личное сообщение для Dr.OH Найти все сообщения от Dr.OH
  № 2  
Dr.OH

Регистрация: Aug 2003
Сообщений: 299
Отправить сообщение для Dr.OH с помощью ICQ
тебе нуже алгортим построения кривой или что?

Старый 02.02.2004, 20:32
alexei_z вне форума Посмотреть профиль Отправить личное сообщение для alexei_z Найти все сообщения от alexei_z
  № 3  
alexei_z

Регистрация: Jan 2004
Адрес: Калуга
Сообщений: 7
Ну в общем да. Алгоритм. Ну и реально ли это на флеше сделать?

Старый 02.02.2004, 21:54
Dr.OH вне форума Посмотреть профиль Отправить личное сообщение для Dr.OH Найти все сообщения от Dr.OH
  № 4  
Dr.OH

Регистрация: Aug 2003
Сообщений: 299
Отправить сообщение для Dr.OH с помощью ICQ
делается это элементарно. Строится кубический полином по заданным точкам с нужным шагом... вот собственно и все. Попытаюсь дать пример, но на C++, на Flash'е ты врядли разберешь - там еще по кадрам разбито:
Код:
//функции для рисования кривой Безье
void drawCurve(GLfloatPoint x1, GLfloatPoint x2, GLfloatPoint s1, GLfloatPoint s2) {
	//next - x2; cur - x1
				//коэффициенты кусочного кубического полинома третьей степени
	const GLfloatPoint A(s2.x+s1.x-2*(x2.x-x1.x),   s2.y+s1.y-2*(x2.y-x1.y));
	const GLfloatPoint B(3*(x2.x-x1.x)-2*s1.x-s2.x, 3*(x2.y-x1.y)-2*s1.y-s2.y);
	const GLfloatPoint C(s1.x, s1.y);
	const GLfloatPoint D(x1.x,x1.y);
	for (GLfloat dt = 0; dt<=1; dt+=0.01) {
		float t3=dt*dt*dt; float t2=dt*dt; float t1=dt;
		float x = A.x*t3+B.x*t2+C.x*t1+D.x;
		float y = A.y*t3+B.y*t2+C.y*t1+D.y;
		m_cv.lineTo(x,y);
	}
}
void curveMid(GLfloatPoint prev, GLfloatPoint cur, GLfloatPoint next, GLfloatPoint n_next) {
	const float m(0.5);
	const GLfloatPoint Sk0 (m*(next.x-prev.x),  m*(next.y-prev.y) );
	const GLfloatPoint Sk1 (m*(n_next.x-cur.x), m*(n_next.y-cur.y));
	drawCurve(cur,next,Sk0,Sk1);
}
void curveBegin(GLfloatPoint prev, GLfloatPoint cur, GLfloatPoint next) {
	const float m(0.5);
	const GLfloatPoint Sk1 (m*(next.x-prev.x), m*(next.y-prev.y));
	const GLfloatPoint Sk0 (0.5*(3*(cur.x-prev.x)-Sk1.x),0.5*(3*(cur.y-prev.y)-Sk1.y));
	drawCurve(prev,cur,Sk0,Sk1);
}

void curveEnd(GLfloatPoint prev, GLfloatPoint cur, GLfloatPoint next) {
	const float m(0.5);
	const GLfloatPoint Sk0 (m*(next.x-prev.x), m*(next.y-prev.y));
	const GLfloatPoint Sk1 (0.5*(3*(next.x-cur.x)-Sk0.x),0.5*(3*(next.y-cur.y)-Sk0.y));
	drawCurve(cur,next,Sk0,Sk1);
}
если не разберешься могу прокомментировать....

Старый 02.02.2004, 21:55
Dr.OH вне форума Посмотреть профиль Отправить личное сообщение для Dr.OH Найти все сообщения от Dr.OH
  № 5  
Dr.OH

Регистрация: Aug 2003
Сообщений: 299
Отправить сообщение для Dr.OH с помощью ICQ
да, совсем забыл GLFloatPoint - это объект с элментами x и y типа float.

Старый 03.02.2004, 00:08
alexei_z вне форума Посмотреть профиль Отправить личное сообщение для alexei_z Найти все сообщения от alexei_z
  № 6  
alexei_z

Регистрация: Jan 2004
Адрес: Калуга
Сообщений: 7
По умолчанию Спасибо!

Я сейчас попытаюсь переложить это на флеш. Но если ты уже делал это на Флеше, может подгонишь? Я быстрее разберусь

Спасибо.

Старый 03.02.2004, 00:37
Dr.OH вне форума Посмотреть профиль Отправить личное сообщение для Dr.OH Найти все сообщения от Dr.OH
  № 7  
Dr.OH

Регистрация: Aug 2003
Сообщений: 299
Отправить сообщение для Dr.OH с помощью ICQ
без проблем кину, тока там метр, т.е. весть проект целиком... честно говоря, по-моему в том, что на С++ намного легче разобраться...
последние три функции особым образом задают коэффициенты, а первая строит параметрическую кривую.

Старый 03.02.2004, 00:58
alexei_z вне форума Посмотреть профиль Отправить личное сообщение для alexei_z Найти все сообщения от alexei_z
  № 8  
alexei_z

Регистрация: Jan 2004
Адрес: Калуга
Сообщений: 7
Я примерно понял код, но не до конца. Вообще мне сложно понять потому что я не очень в математике...
Если есть желание - объясни поподробнее как этим воспользоваться.
Если есть возможность - исходник на Флеш - идеально.

Там я может всего не пойму (а всего я всеравно не пойму, надо было учиться лучше), но хот смогу методом подгона, проб, ошибок, тестов и т.п. применить к своей задаче.

Ну и надо в исходники будет оязательно залить. Тема-то интересная!

Старый 03.02.2004, 01:24
Dr.OH вне форума Посмотреть профиль Отправить личное сообщение для Dr.OH Найти все сообщения от Dr.OH
  № 9  
Dr.OH

Регистрация: Aug 2003
Сообщений: 299
Отправить сообщение для Dr.OH с помощью ICQ
могу кинуть описание того, как это вообще все делается, но только на почту - сюда не влезет, там 600Кб... так что давай почту - пришлю

Старый 03.02.2004, 02:00
alexei_z вне форума Посмотреть профиль Отправить личное сообщение для alexei_z Найти все сообщения от alexei_z
  № 10  
alexei_z

Регистрация: Jan 2004
Адрес: Калуга
Сообщений: 7
:))))))))

zadelo@kaluga.ru

Жду, с нетерпением!!!!

Потом отпишу как там что получилось!

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

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

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


 


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


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