PDA

Просмотр полной версии : Груз на нитке.


_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
Пытаюсь сделать такой эффект, некий груз предположим шарик висит на нитке (верхний край нитки зафиксирован), нитка и шарик ведут себя согласно всем законам гравитации, нитка не упругая, а фиксированной длинны. Шарик перетаскивается с помошью мыши. Порыскав на форуме, почитав физику за 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
Не упругая нить - это такая нить, которая после прекращения действия причины, вызвавшей ее деформацию, теряет исходные размеры и форму, т. е. имеет место остаточная деформация.
Тогда причем тут "фиксированной длины"?:wacko:
Помоему вы что-то перемудрили, думаю если бы вы посмотрели код, который содержится в первом посте, вы бы сразу поняли суть вопроса.

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

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

etc
06.02.2008, 23:31
В первом коде очевидно инверсная кинематика. И где-то этот код, в особенности с гравитацией, я уже где-то видел (http://www.flasher.ru/forum/showpost.php?p=556234&postcount=6) :)
А вы говорите, учебники, все дела… ;)

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

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

_Nickromant_
06.02.2008, 23:50
Да мне пофиг, автор оригинального кода не я :)
В принципе я так и понял :) , просто, так сказать, обмен любезностями :)
У вас последняя координата и есть конец веревки.
Это я понимаю, я не могу к концу веревки привязать клип шарика, точнее говоря я даже это могу, но не могу заставить веревку двигаться за шариком, остовляя 1 конец закрепленным.
Подскажите хоть в каком лесу ответ искать. Это точно кривые Безье?

etc
06.02.2008, 23:51
Никаких кривых Безье тут нет.