Тема: Веревка
Показать сообщение отдельно
Старый 24.07.2006, 16:03
F_Flash вне форума Посмотреть профиль Отправить личное сообщение для F_Flash Найти все сообщения от F_Flash
  № 2  
Ответить с цитированием
F_Flash
 
Аватар для F_Flash

Регистрация: Feb 2002
Сообщений: 358
Отправить сообщение для F_Flash с помощью ICQ
Хороший вопрос%)

размер вревки это длина кривой. Для этого нам хотябы нужно ее научиться находить.

длина кривой вычисялется по фрмуле

http://ru.wikipedia.org/wiki/%D0%94%...B2%D0%BE%D0%B9


далее смотрим по какой формуле мы строим кривую если это бикубический сплайн(кривая безье) то есть топик

http://algolist.manual.ru/forum/show...036/page//vc/1


во флеше используется для пострениея кривых

http://people.nnov.ru/fractal/Splines/Bezier.htm


вот код для флеша
Код:
// quadratic bezier functions
function B1 (t) {
	return (t*t);
}
function B2 (t) {
	return (2*t*(1-t));
}
function B3 (t) {
	return ((1-t)*(1-t));
}

// draw spline routine : called from RedrawClip
function DrawSpline () {
	count = 0;
	// change this for smooth line
	detailBias = 1/23;
	level = 1;
	do {
		x = cP1._x*B1(count)+cP2._x*B2(count)+cP3._x*B3(count);
		y = cP1._y*B1(count)+cP2._y*B2(count)+cP3._y*B3(count);
		if (level>1) {
			attachMovie("line", "line"+level, level+10);
			_root["line"+level]._x = x;
			_root["line"+level]._y = y;
			_root["line"+level]._rotation = Math.atan2(yold-y, xold-x)*180/(Math.PI);
			_root["line"+level]._xscale = _root["line"+level]._yscale = Math.sqrt((xold-x)*(xold-x)+(yold-y)*(yold-y));
		}
		yold = y;
		xold = x;
		++level;
		count += detailBias;
	} while (count<=1);
}

// main init : put 3 control point to stage
for (i=1; i<=3; i++) {
	attachMovie("cdot", "cP"+i, i);
	_root["cP"+i]._x = random(540);
	_root["cP"+i]._y = random(400);
}
для вычисления длины я просто прибалял расстояния от точки до сдледущей точки аппроксимации.На выходе погрешнось зависит от количесва сегментов для апроксимации.

далее все зависит от того по каким параметрам ты хочешь построить кривую заданной длины. если анпример по трем точкам и длине так ее можно просто не дориосвывать. т.е. нкжно знать какие параметры функции построения ты быдешь передать кроме длины.


Последний раз редактировалось F_Flash; 24.07.2006 в 16:06.