|
Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения |
17.08.2012, 18:13
|
#1
|
Разработчик
Регистрация: 14.12.2008
Адрес: Томск
Сообщений: 530
Написано 270 полезных сообщений (для 883 пользователей)
|
"Пружинистое" движение
Требуется сделать движение, подобное синему шарику.
То есть, есть какая-то цель (красный шарик). Движется рандомно, нелинейно. Иногда тормозит. Надо ее догонять. Причем так, чтобы движение в итоге выглядело "пружинистым", "как на веревочке", ну, вы меня поняли. GIFка в аттаче.
Вот как это можно сделать? Вроде бы задача и не сложная, но вот как ее решить... Писец, заклинило! В голове пусто.
|
(Offline)
|
|
17.08.2012, 19:07
|
#2
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: "Пружинистое" движение
Методом Эйлера реализовать колебательное звено.
Любое решение будет лишь менее формальной реализацией вышесказанного.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
|
|
17.08.2012, 21:37
|
#3
|
Разработчик
Регистрация: 27.01.2011
Адрес: Афипский
Сообщений: 419
Написано 100 полезных сообщений (для 182 пользователей)
|
Ответ: "Пружинистое" движение
А если решать "в лоб"? У шарика есть масса, скорость; у невидимой пружины - коэффициент жесткости; при растяжении она придает синему шарику ускорение.
UPD: Реализовал на мидлетпаскале:
uses sensor;
type
ball = record
x,y,r:integer;
m,vx,vy:real;
end;
procedure draw_ball(b:ball);
begin
fillellipse(b.x-b.r,b.y-b.r,b.r*2,b.r*2);
end;
var
b1,b2:ball;
fx,fy,k,lx,ly:real;
begin
sensor.init;
k:=1;
b1.r:=20;
b2.x:=0; b2.y:=0; b2.m:=100; b2.vx:=0; b2.vy:=0; b2.r:=10;
repeat
b1.x:=pointer_dragged_x;
b1.y:=pointer_dragged_y;
lx:=b1.x-b2.x;
ly:=b1.y-b2.y;
fx:=lx*k;
fy:=ly*k;
b2.vx:=b2.vx+(fx/b2.m);
b2.vy:=b2.vy+(fy/b2.m);
b2.x:=b2.x+trunc(b2.vx);
b2.y:=b2.y+trunc(b2.vy);
b2.vx:=b2.vx*0.95;
b2.vy:=b2.vy*0.95;
setcolor(255,255,255);
fillrect(0,0,getwidth,getheight);
setcolor(255,0,0);
draw_ball(b1);
setcolor(0,0,255);
draw_ball(b2);
repaint;
delay(10);
until false;
end.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.08.2012, 14:00
|
#4
|
Разработчик
Регистрация: 14.12.2008
Адрес: Томск
Сообщений: 530
Написано 270 полезных сообщений (для 883 пользователей)
|
Ответ: "Пружинистое" движение
to AVL: О! Спасибо! Это как раз то, что нужно было! Просто и понятно, по - нашему. )
to impersonalis: Штука интересная, почитаю. Это не что-то похожее на easeOutBack-функцию?
|
(Offline)
|
|
20.10.2012, 23:30
|
#5
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: "Пружинистое" движение
Сообщение от cahekp
to impersonalis: Штука интересная, почитаю. Это не что-то похожее на easeOutBack-функцию?
|
вот
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:30.
|