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

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

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

Регистрация: Nov 2003
Сообщений: 290
По умолчанию Помогите pls разобраться с Iv'овским Path'ем.

Друзья, помогите пожалуйста разобраться с классом Path от Iv'а. (исходник приложен). Проблема в том, что один экземпляр класса работает корректно, а если добавить второй - начинается ерунда (в исходнике этот фрагмент закомментирован). Ума не приложу что делать...
Вложения
Тип файла: rar randPath.rar (8.9 Кб, 42 просмотров)

Старый 17.08.2006, 13:47
pkfun вне форума Посмотреть профиль Отправить личное сообщение для pkfun Посетить домашнюю страницу pkfun Найти все сообщения от pkfun
  № 2  
Ответить с цитированием
pkfun

Регистрация: Feb 2006
Сообщений: 580
А сам автор чего говорит? Этот Iv, он же вроде здесь на форуме бывает.

Старый 17.08.2006, 14:06
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Код:
/*
В© Ivan Dembicki, 2004, dembicki@narod.ru
please check updates: http://www.dembicki.org

Path class 
version 1.1 
*/
class Path {
	var path_points:String = "", path_length:Number = 0;
	var segments:Number = 0;
	private var ln_array:Array;
	function Path() {
                this.ln_array = [];
		var arg:Array = typeof arguments[0] == "number" ? arguments : arguments[0];
		this.path_points=arg.toString(), this.path_length=0;
		var k:Number = 0;
		var  i:Number;
		var len:Number = arg.length;
		var x0:Number = arg[0] || 0;
		var y0:Number = arg[1] || 0;
		var o:Object;
		var  x1:Number, y1:Number, x2:Number, y2:Number, ln:Array, a1:Number, a2:Number;
		var a3:Number, a4:Number, a:Number, b:Number, c:Number, d:Number, e:Number, a2t:Number, sa:Number;
		for (i=2; i<len; i += 4) {
			x1 = arg[i] || 0;
			y1 = arg[i+1] || 0;
			if (i == (len-2)) {
				x2 = arg[i+2] ? arg[i+2] : (arg[0] || 0);
				y2 = arg[i+3] ? arg[i+3] : (arg[1] || 0);
			} else {
				x2 = arg[i+2] || 0;
				y2 = arg[i+3] || 0;
			}
			ln = this.ln_array[k++]=[{_y:y0, _x:x0}, {_y:y1, _x:x1}, {_y:y2, _x:x2}];
			o = ln[3]={};
			a1 = o.a1=x0-2*x1+x2;
			a2 = o.a2=y0-2*y1+y2;
			a3 = o.a3=x0-x1;
			a4 = o.a4=y0-y1;
			a = o.a=4*(a1*a1+a2*a2);
			b = o.b=-8*(a1*a3+a2*a4);
			c = o.c=4*(a3*a3+a4*a4);
			e = o.e=Math.sqrt(c);
			d = Math.sqrt(c+b+a);
			sa = Math.sqrt(a);
			a2t = a*2;
			ln[4] = (2*sa*(d*(b+a2t)-e*b)+(b*b-4*a*c)*(Math.log(2*e+b/sa)-Math.log(2*d+(b+a2t)/sa)))/(8*Math.pow(a, (3/2)));
			if (isNaN(ln[4])) {
				var del:Number = 100000;
				arg[i] += Math.random()/del;
				arg[i+1] += Math.random()/del;
				arg[i+2] += Math.random()/del;
				arg[i+3] += Math.random()/del;
				arg[i+4] += Math.random()/del;
				arg[i+5] += Math.random()/del;
				i -= 4;
				k--;
			} else {
				this.path_length += ln[4];
				x0 = x2;
				y0 = y2;
			}
		}
		this.segments = k--;
	}
	public function getPoint(poz:Number, omit_rotation:Boolean):Object {
		
		//added
		if (poz > this.path_length) {
			poz = this.path_length;
		} else if (poz < 0) {
			poz = 0;
		}
		//end added
		
		poz = poz%this.path_length;
		//poz<0 ? poz += this.path_length : "";
		if(poz<0)poz += this.path_length;
		if(!poz)poz += .00001;
		if (this.segments<1) {
			return false;
		}
		var i:Number = 0, ln:Number, len:Number = 0, ff:Number = 0;
		for (i; i<=this.segments; i++) {
			ln=this.ln_array[i], len += ln[4];
			if (len>poz) {
				ff = (poz-(len-ln[4]))/ln[4];
				break;
			}
		}
		var fn:Function = function (ff:Number):Number {
			var o:Object = ln[3];
			var a1:Number = o.a1, a2:Number = o.a2, a3:Number = o.a3, a4:Number = o.a4, a:Number = o.a, b:Number = o.b;
			var  c:Number = o.c, e:Number = o.e, i:Number = 1, st:Number = 1, f_l:Number = ln[4], t_l:Number = ff*f_l, max_i:Number = 100; 
			var d:Number, sa:Number, a2i:Number;
			while (max_i--) {
				d=Math.sqrt(c+i*(b+a*i));
				sa=Math.sqrt(a);
				a2i=a*2*i;
				f_l=(2*sa*(d*(b+a2i)-e*b)+(b*b-4*a*c)*(Math.log(2*e+b/sa)-Math.log(2*d+(b+a2i)/sa)))/(8*Math.pow(a, (3/2)));
				if (Math.abs(f_l-t_l)<.000001) {
					return i;
				}
				st /= 2;
				i += f_l<t_l ? st : f_l>t_l ? -st : 0;
			}
			return i;
		};
		var f:Number = fn(ff);
		var p0:Object = ln[0], p1:Object = ln[1], p2:Object = ln[2];
		var  e:Number = 1-f, ee:Number = e*e, ff:Number = f*f, b:Number = 2*f*e;
		if (omit_rotation) {
			return  {_x:p2._x*ff+p1._x*b+p0._x*ee, _y:p2._y*ff+p1._y*b+p0._y*ee};
		} else {
			return {_x:p2._x*ff+p1._x*b+p0._x*ee, _y:p2._y*ff+p1._y*b+p0._y*ee, _rotation:Math.atan2(p0._y-p1._y+(2*p1._y-p0._y-p2._y)*f, p0._x-p1._x+(2*p1._x-p0._x-p2._x)*f)/(Math.PI/180)};
		}
		 
	}
}
Попробуй, может поможет.

Старый 17.08.2006, 14:20
: hr : вне форума Посмотреть профиль Отправить личное сообщение для : hr : Найти все сообщения от : hr :
  № 4  
Ответить с цитированием
: hr :

Регистрация: Nov 2003
Сообщений: 290
__etc , спасибо! помогло.. щас буду разбираться что ты там исправил спасибо!

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

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

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


 


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


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