Просмотр полной версии : Груз на нитке.
_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);
не получается привязать шарик к концу нитки и заставить двигаться за курсором вместе с ниткой.
В общем подскажите, буду очень благодарен, если у кого есть материал на эту тему или собственное решение, прошу поделиться. Заранее благодарю.
Имхо, про кривые безье нужно читать.
_Nickromant_
06.02.2008, 20:50
Находил на форуме ссылку на алгоритмы на основе, кривых Пьера Безье, но к сажелению, они оказались битыми =(, а то что помог найти мне Google, с програмированием связанно слабо в основном теоретический матерьял без применения.
Если у кого есть ссылка, буду благодарен.
Про кривые безье тут:
http://www.bezier.ru/
_Nickromant_
06.02.2008, 21:07
Obi, хотел уже писать гневный пост с примерно таким содержанием:
"Этот сайт я видел и по кривым Безье, там нечего нет, кроме названия, а вы Obi, проверяйте инфармацию прежде чем ее давать."
Но во время одумался и посмотрел сайт в IE оказалось все нормально, не поверите но в Опере сайт выглядит, совершенно иначе, там ровным счетом 3 покалеченных ссылок =( и не капли про кривые Бюзье. Благодарю, так сказать, за то что открыли мне глаза =).
Буду читать, но всеже хотелось бы советов конкретно по моему случаю.
Там пакет классов для АС2 как раз, Дембицкий писал.
Пытаюсь сделать такой эффект, некий груз предположим шарик висит на нитке (верхний край нитки зафиксирован), нитка и шарик ведут себя согласно всем законам гравитации, нитка не упругая, а фиксированной длинны. Шарик перетаскивается с помошью мыши. Порыскав на форуме, почитав физику за 9 класс и тд, добился следушего:
не получается привязать шарик к концу нитки и заставить двигаться за курсором вместе с ниткой.
В общем подскажите, буду очень благодарен, если у кого есть материал на эту тему или собственное решение, прошу поделиться. Заранее благодарю.
Не упругая нить - это такая нить, которая после прекращения действия причины, вызвавшей ее деформацию, теряет исходные размеры и форму, т. е. имеет место остаточная деформация.
Тогда причем тут "фиксированной длины"?:wacko:
Шарик, весящий на упругой натянутой нити (струне) это маятник - при чем тут кривые Безье?
Моделирование поведения нити, к которой привязан шарик в произвольном случае тянет как минимум на кандидатскую по математике.
ЗЫ: задачу нужно коректно формулировать.
http://www.cove.org/flade/demos/demo1.htm -- кандидатская?
В середине тележки квадрат на нитке, насколько я понял, автору как-раз это и нужно.
Obi, ваша способность искать всякие вкусности на флеше конечно радует, осталось научиться связывать увиденое с поставленым вопросом. В последнем примере ваще не нить. А кандидатская может получиться, если Вы сами напишите такой же движок.
_Nickromant_
06.02.2008, 23:25
Не упругая нить - это такая нить, которая после прекращения действия причины, вызвавшей ее деформацию, теряет исходные размеры и форму, т. е. имеет место остаточная деформация.
Тогда причем тут "фиксированной длины"?:wacko:
Помоему вы что-то перемудрили, думаю если бы вы посмотрели код, который содержится в первом посте, вы бы сразу поняли суть вопроса.
Моделирование поведения нити, к которой привязан шарик в произвольном случае тянет как минимум на кандидатскую по математике.
Хоть на нобелевскую премию, в любом случае надо делать :)
В середине тележки квадрат на нитке, насколько я понял, автору как-раз это и нужно.
По сути то, только конец со стороны тележки зафиксирован, в определенном месте, а кубик перемешается за мышкой
ЗЫ Посмотрите код пожалуйста, там по сути 2 проблемы остались, Как прикрепить груз к концу веревки и как заставить двигаться веревку при перемешении груза.
В первом коде очевидно инверсная кинематика. И где-то этот код, в особенности с гравитацией, я уже где-то видел (http://www.flasher.ru/forum/showpost.php?p=556234&postcount=6) :)
А вы говорите, учебники, все дела… ;)
_Nickromant_
06.02.2008, 23:36
Порыскав на форуме, почитав физику за 9 класс и тд
__etc, присвоить заслуги не в коем случае не хотел (если хотел бы, то хоть коменты стер :) ), во избежании недоразумений, в следующий раз буду копирайты оставлять :)
Да мне пофиг, автор оригинального кода не я :)
У вас последняя координата и есть конец веревки.
_Nickromant_
06.02.2008, 23:50
Да мне пофиг, автор оригинального кода не я :)
В принципе я так и понял :) , просто, так сказать, обмен любезностями :)
У вас последняя координата и есть конец веревки.
Это я понимаю, я не могу к концу веревки привязать клип шарика, точнее говоря я даже это могу, но не могу заставить веревку двигаться за шариком, остовляя 1 конец закрепленным.
Подскажите хоть в каком лесу ответ искать. Это точно кривые Безье?
Никаких кривых Безье тут нет.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.