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

_Nickromant_ 06.02.2008 19:39

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

this.createEmptyMovieClip("line", 1);
this.line.init = function(num, len) {
        this.len = len;
        this.point = [];
        for (var i = 0; i<num+1; i++) {
                var t = new Object();
                t.x = 0+i*20;
                t.y = 200;
                this.point.push(t);
        }
};
this.line.onEnterFrame = function() {
        this.point[0].x = 100
        this.point[0].y = 100;
        this.gravity = 30;
        this.clear();
        this.lineStyle(0, 0, 100);
        this.moveTo(this.point[0].x, this.point[0].y);
        for (var i = 1, len = this.point.length; i<len; i++) {
                this.point[200].x = _root.g._x;
                this.point[200].y = _root.g._y;
                //[x1,y1] и [x2,y2] - координаты предыдущей и текущей точки соответственно
                var x1 = this.point[i-1].x, y1 = this.point[i-1].y;
                var x2 = this.point[i].x, y2 = this.point[i].y;
                // xd и yd - разница расстояний между точками
                var xd = x2-x1
                var yd = y2-y1+this.gravity;
                //dist - расстояние между точками
                var dist = Math.sqrt(xd*xd+yd*yd);
                //коррекция расстояния между точками до требуемого (через подобие)
                this.point[i].x = x1+(xd*this.len)/dist;
                this.point[i].y = y1+(yd*this.len)/dist;
                this.lineTo(this.point[i].x, this.point[i].y);
        }
};

this.line.init(200, 1);

не получается привязать шарик к концу нитки и заставить двигаться за курсором вместе с ниткой.
В общем подскажите, буду очень благодарен, если у кого есть материал на эту тему или собственное решение, прошу поделиться. Заранее благодарю.

Obi 06.02.2008 20:45

Имхо, про кривые безье нужно читать.

_Nickromant_ 06.02.2008 20:50

Находил на форуме ссылку на алгоритмы на основе, кривых Пьера Безье, но к сажелению, они оказались битыми =(, а то что помог найти мне Google, с програмированием связанно слабо в основном теоретический матерьял без применения.
Если у кого есть ссылка, буду благодарен.

Obi 06.02.2008 20:56

Про кривые безье тут:
http://www.bezier.ru/

_Nickromant_ 06.02.2008 21:07

Obi, хотел уже писать гневный пост с примерно таким содержанием:
"Этот сайт я видел и по кривым Безье, там нечего нет, кроме названия, а вы Obi, проверяйте инфармацию прежде чем ее давать."
Но во время одумался и посмотрел сайт в IE оказалось все нормально, не поверите но в Опере сайт выглядит, совершенно иначе, там ровным счетом 3 покалеченных ссылок =( и не капли про кривые Бюзье. Благодарю, так сказать, за то что открыли мне глаза =).
Буду читать, но всеже хотелось бы советов конкретно по моему случаю.

Obi 06.02.2008 21:09

Там пакет классов для АС2 как раз, Дембицкий писал.

aksios 06.02.2008 22:06

Цитата:

Сообщение от _Nickromant_
Пытаюсь сделать такой эффект, некий груз предположим шарик висит на нитке (верхний край нитки зафиксирован), нитка и шарик ведут себя согласно всем законам гравитации, нитка не упругая, а фиксированной длинны. Шарик перетаскивается с помошью мыши. Порыскав на форуме, почитав физику за 9 класс и тд, добился следушего:

не получается привязать шарик к концу нитки и заставить двигаться за курсором вместе с ниткой.
В общем подскажите, буду очень благодарен, если у кого есть материал на эту тему или собственное решение, прошу поделиться. Заранее благодарю.

Не упругая нить - это такая нить, которая после прекращения действия причины, вызвавшей ее деформацию, теряет исходные размеры и форму, т. е. имеет место остаточная деформация.
Тогда причем тут "фиксированной длины"?:wacko:
Шарик, весящий на упругой натянутой нити (струне) это маятник - при чем тут кривые Безье?
Моделирование поведения нити, к которой привязан шарик в произвольном случае тянет как минимум на кандидатскую по математике.
ЗЫ: задачу нужно коректно формулировать.

Obi 06.02.2008 22:43

http://www.cove.org/flade/demos/demo1.htm -- кандидатская?
В середине тележки квадрат на нитке, насколько я понял, автору как-раз это и нужно.

aksios 06.02.2008 23:19

Obi, ваша способность искать всякие вкусности на флеше конечно радует, осталось научиться связывать увиденое с поставленым вопросом. В последнем примере ваще не нить. А кандидатская может получиться, если Вы сами напишите такой же движок.

_Nickromant_ 06.02.2008 23:25

Цитата:

Сообщение от aksios
Не упругая нить - это такая нить, которая после прекращения действия причины, вызвавшей ее деформацию, теряет исходные размеры и форму, т. е. имеет место остаточная деформация.
Тогда причем тут "фиксированной длины"?:wacko:

Помоему вы что-то перемудрили, думаю если бы вы посмотрели код, который содержится в первом посте, вы бы сразу поняли суть вопроса.
Цитата:

Сообщение от aksios
Моделирование поведения нити, к которой привязан шарик в произвольном случае тянет как минимум на кандидатскую по математике.

Хоть на нобелевскую премию, в любом случае надо делать :)
Цитата:

Сообщение от Obi
В середине тележки квадрат на нитке, насколько я понял, автору как-раз это и нужно.

По сути то, только конец со стороны тележки зафиксирован, в определенном месте, а кубик перемешается за мышкой
ЗЫ Посмотрите код пожалуйста, там по сути 2 проблемы остались, Как прикрепить груз к концу веревки и как заставить двигаться веревку при перемешении груза.

etc 06.02.2008 23:31

В первом коде очевидно инверсная кинематика. И где-то этот код, в особенности с гравитацией, я уже где-то видел :)
А вы говорите, учебники, все дела… ;)

_Nickromant_ 06.02.2008 23:36

Цитата:

Сообщение от _Nickromant_
Порыскав на форуме, почитав физику за 9 класс и тд

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

etc 06.02.2008 23:41

Да мне пофиг, автор оригинального кода не я :)
У вас последняя координата и есть конец веревки.

_Nickromant_ 06.02.2008 23:50

Цитата:

Сообщение от __etc
Да мне пофиг, автор оригинального кода не я :)

В принципе я так и понял :) , просто, так сказать, обмен любезностями :)
Цитата:

Сообщение от __etc
У вас последняя координата и есть конец веревки.

Это я понимаю, я не могу к концу веревки привязать клип шарика, точнее говоря я даже это могу, но не могу заставить веревку двигаться за шариком, остовляя 1 конец закрепленным.
Подскажите хоть в каком лесу ответ искать. Это точно кривые Безье?

etc 06.02.2008 23:51

Никаких кривых Безье тут нет.


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

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