forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   "Пружинистое" движение (http://forum.boolean.name/showthread.php?t=17193)

cahekp 17.08.2012 18:13

"Пружинистое" движение
 
Вложений: 1
Требуется сделать движение, подобное синему шарику.
То есть, есть какая-то цель (красный шарик). Движется рандомно, нелинейно. Иногда тормозит. Надо ее догонять. Причем так, чтобы движение в итоге выглядело "пружинистым", "как на веревочке", ну, вы меня поняли. GIFка в аттаче.

Вот как это можно сделать? Вроде бы задача и не сложная, но вот как ее решить... Писец, заклинило! В голове пусто.

impersonalis 17.08.2012 19:07

Ответ: "Пружинистое" движение
 
Методом Эйлера реализовать колебательное звено.
Любое решение будет лишь менее формальной реализацией вышесказанного.

AVL 17.08.2012 21:37

Ответ: "Пружинистое" движение
 
Вложений: 1
А если решать "в лоб"? У шарика есть масса, скорость; у невидимой пружины - коэффициент жесткости; при растяжении она придает синему шарику ускорение.
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.


cahekp 18.08.2012 14:00

Ответ: "Пружинистое" движение
 
to AVL: О! Спасибо! Это как раз то, что нужно было! :) Просто и понятно, по - нашему. )
to impersonalis: Штука интересная, почитаю. Это не что-то похожее на easeOutBack-функцию?

impersonalis 20.10.2012 23:30

Ответ: "Пружинистое" движение
 
Цитата:

Сообщение от cahekp (Сообщение 236573)
to impersonalis: Штука интересная, почитаю. Это не что-то похожее на easeOutBack-функцию?

вот


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot