Форум 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=87629)

Rusteman 08.11.2006 22:23

как мне описать физическое явление как магнетизм?
 
Помогите пожалуйста!
как мне описать физическое явление как магнетизм?
у меня есть два объекта: движущийся шар и статический квадрат.Шар имеет положительную полярность.Квадрат может иметь два состояния и некоторую область, при попадании в которую происходят следующие события: 1)когда он положительно поляризован(в этом случае шар отталкивается от квадрата) и 2)отрицательно поляризован(соответственно притягивается)
если есть какие идеи присылайте!
Заранее благодарен!

Dendroid 08.11.2006 22:42

Между прочим, квадратный магнит создаст нетривиальный градиент магнитного поля вокруг, лучше взять ещё один шар ;)
А если принебречь формой, то это будет просто сила, обратно пропорциональная кварату расстояния между центрами предметов.
Т.е. надо либо v+=k/((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0)) либо v-=k/((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0)), главное - подобрать k, чтобы натурально смотрелось :)

В вашей школе совсем физики нет?

Жень Шень 09.11.2006 11:37

Вложений: 1
Привет!
У меня не шары, но ... принцип тот же.
Второй пример с урока не высылаю, там сосвсем просто. Разноименные стороны притягиваются. Магнит верхний падает с ускорением. Нижний при сближении чуть подпрыгивает. Оба слипаются и падают с грохотом вниз. Всё!.
PS
В приложенном примере только основная часть и подпись оставлены.

Therion 09.11.2006 14:01

вот я сейчас этим и занимаюсь:)
пытаюсь сделать симулятор позитивных и негативных частиц
вроде пока получается, вот мой прогресс на сегодняшний день:
Код:

function G(me,obj1,obj2) {
        me.onEnterFrame=function(){
        for(i=0;i<obj1.length;i++){
        var dx = this._x - obj1[i]._x
        var dy = this._y - obj1[i]._y
        var D=Math.sqrt(dx*dx+dy*dy)
        var F=-100/D
        if(Math.abs(F)<0.1|D<20){
                F=0
        }
        if(D<5){
                me._x=+10
        }
        angle = Math.atan2 (dy, dx);
                me._x -= Math.cos (angle) * F
                me._y -= Math.sin (angle) * F
       
}
    for(l=0;l<obj2.length;l++){
        var dx2 = this._x - obj2[l]._x
        var dy2 = this._y - obj2[l]._y
        var D2=Math.sqrt(dx2*dx2+dy2*dy2)
        var F2=100/D
        if(Math.abs(F2)<0.1|D2<20){
                F2=0
        }
        angle2 = Math.atan2 (dy2, dx2);
                me._x -= Math.cos (angle2) * F2
                me._y -= Math.sin (angle2) * F2
       
}

где "me" это имя самого обьекта к которому относится функция G
"obj1"-это массив всех объектов от которых он отталкивается
"obj2"-массив объектов к которым он претягивается

тоесть если у нас есть негативные частички A1 и A2, и две позетивные частички B и B1, то функцию используем следуюшм образом:
Код:

G(A1,[A2],[B,B1])
G(A2,[A1],[B,B1])
G(B,[B1],[A1,A2])
G(B1,[ B],[A2,A1])

когда много частичек, то немного глючит, зато они строят интересные структуры в которых все силы сбалансированны.Код ещё нужно модернезировать, если кто захочет может помочь;)

Rusteman 09.11.2006 15:10

Всем большое спасибо! конкретно помогли, наконец пошло продвижение в работе :):victory:

Therion 12.11.2006 03:54

внимание в коде страшная оппечатка!
Код:

function G(me,obj1,obj2) {
        me.onEnterFrame=function(){
        for(i=0;i<obj1.length;i++){
        var dx = this._x - obj1[i]._x
        var dy = this._y - obj1[i]._y
        var D=Math.sqrt(dx*dx+dy*dy)
        var F=-100/D
        if(Math.abs(F)<0.1|D<20){
                F=0
        }
        if(D<5){
                me._x=+10
        }
        angle = Math.atan2 (dy, dx);
                me._x -= Math.cos (angle) * F
                me._y -= Math.sin (angle) * F
       
}
    for(l=0;l<obj2.length;l++){
        var dx2 = this._x - obj2[l]._x
        var dy2 = this._y - obj2[l]._y
        var D2=Math.sqrt(dx2*dx2+dy2*dy2)
        var F2=100/D2
        if(Math.abs(F2)<0.1|D2<20){
                F2=0
        }
        angle2 = Math.atan2 (dy2, dx2);
                me._x -= Math.cos (angle2) * F2
                me._y -= Math.sin (angle2) * F2
       
}



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

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