Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   хаотическое движение из точки в точку (http://www.flasher.ru/forum/showthread.php?t=107895)

quazare 11.02.2008 22:55

хаотическое движение из точки в точку
 
Народ, подскажите как правильно сделать:

1.Допустим есть объект, который движеться из точки А в точку Б.

2.Интересно было бы сделать, чтобы движение объекта было не по-прямой, а хаотически - допустим из стороны в сторону (синусуйду не рассматриваем), но всеже сохраняя данную траекторию.

Подскажите правильный подход. Если есть дайте примерчик...
Спасибо...
:umnik2:

iNils 11.02.2008 23:13

У вас есть вектор движения, его разбиваете на проекции X и Y, задавая на каждом шаге новое случайное значение для каждой проекции от 0 до максимального расстояния за шаг (при условии, что на данной проекции объект не достиг конечной координаты), вы получите хаотичное движение

quazare 12.02.2008 17:52

так, если вектор движения - прямая, то относительно чего строить проекции??? я не совсем понимаю к сожалению, данные мат.выкладки...

MrPoma 12.02.2008 18:06

Код:

var deg:Number = 45;
var radius:Number = 10;

var dx:Number = Math.sin(deg * (Math.PI/180)) * radius;
var dy:Number = Math.cos(deg * (Math.PI/180)) * radius;


Ravanger 12.02.2008 18:26

Цитата:

так, если вектор движения - прямая, то относительно чего строить проекции???
относительно осей координат

для примера картинка

wvxvw 12.02.2008 18:37

Вектор и прямая -- это разные вещи %)
Код:

import flash.geom.Point;
var a:Point;
var b:Point;
var canvas:MovieClip;
var a_mc:MovieClip;
var b_mc:MovieClip;
var counter:Number = 0;
function dFunc(p:Number):Point {
        return new Point(a.x + p*modifier(p)*(b.x-a.x), a.y + p*modifier(p)*(b.y-a.y));
}
function modifier(n:Number):Number {
        var r_n:Number;
        if(n<=.5){
                r_n = 1 + Math.random()*n;
        } else {
                r_n = 1 + Math.random()*(n - 1);
        }
        return r_n;
}
function crl(mc:MovieClip, r:Number, c:Number, a:Number):MovieClip {
        var _mc:MovieClip = mc.createEmptyMovieClip("crl"+mc.getNextHighestDepth(), mc.getNextHighestDepth());
        var c1:Number = r*(Math.SQRT2-1);
        var c2:Number = r*Math.SQRT2/2;
        var d:Number = r*2;
        _mc.beginFill(c,a);
        _mc.moveTo(d,r);
        _mc.curveTo(d,r+c1,r+c2,r+c2);
        _mc.curveTo(r+c1,d,r,d);
        _mc.curveTo(r-c1,d,r-c2,r+c2);
        _mc.curveTo(0,r+c1,0,r);
        _mc.curveTo(0,r-c1,r-c2,r-c2);
        _mc.curveTo(r-c1,0,r,0);
        _mc.curveTo(r+c1,0,r+c2,r-c2);
        _mc.curveTo(d,r-c1,d,r);
        _mc.endFill();
        return _mc;
}
//-------- init scene -----------//
a = new Point(Math.random()*Stage.width, Math.random()*Stage.height);
b = new Point(Math.random()*Stage.width, Math.random()*Stage.height);
canvas = this.createEmptyMovieClip('canvas', this.getNextHighestDepth());
canvas.lineStyle(1, 0xffff);
canvas.moveTo(a.x, a.y);
a_mc = crl(this, 5, 0xff, 100);
a_mc._x = a.x-5;
a_mc._y = a.y-5;
b_mc = crl(this, 5, 0xff, 100);
b_mc._x = b.x-5;
b_mc._y = b.y-5;
//-------- animate ----------//
this.onEnterFrame = function():Void {
        var p:Point;
        if(counter<1){
                counter += .01;
                p = dFunc(counter);
                canvas.lineTo(p.x, p.y);
        } else {
                delete this.onEnterFrame;
        }
}

Вот так, например


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

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