Моделирование поведения весны
По сути, я хочу смоделировать поведение весны на нарисованном изображении. Я хочу, чтобы он проходил через несколько итераций, масштабируя его вверх и вниз (как это зафиксировано на пружине).
Все примеры, которые я нашел в сети, ведут к этому классу -FloatSpring.java
Он должен обеспечить необходимые расчеты для перемещения точки A в точку B с применением пружинящего эффекта, который зависит от различных настроек класса FloatSpring. Проблема в том, что я не нашел ни одного четкого примера, как правильно его использовать.
Я сделал этот маленький пример, чтобы проверитьFloatSpring
на:
public static void main ( String[] args )
{
// Some image to bounce
final ImageIcon icon =
new ImageIcon ( WebProgressOverlayExample.class.getResource ( "icons/ava1.jpg" ) );
// Component to paint image on
JComponent spring = new JComponent ()
{
// Zoom value (1f = 100% = normal size)
float zoom = 1f;
{
// Basic spring settings
final FloatSpring fs = new FloatSpring ( 100 );
fs.setPosition ( zoom );
// Animation delay
final int delay = 1000 / 24;
// Animator
new Timer ( delay, new ActionListener ()
{
private float elapsed = 0f;
public void actionPerformed ( ActionEvent e )
{
// Increasing elapsed time and updating spring
elapsed += delay;
fs.update ( 3f, elapsed );
// Updating zoom value and component
zoom = fs.getPosition ();
repaint ();
}
} ).start ();
}
protected void paintComponent ( Graphics g )
{
super.paintComponent ( g );
// Scaled image
int width = Math.round ( icon.getIconWidth () * zoom );
int height = Math.round ( icon.getIconHeight () * zoom );
g.drawImage ( icon.getImage (), getWidth () / 2 - width / 2,
getHeight () / 2 - height / 2, this );
}
public Dimension getPreferredSize ()
{
return new Dimension ( 500, 500 );
}
};
JFrame frame = new JFrame ();
frame.add ( spring );
frame.pack ();
frame.setLocationRelativeTo ( null );
frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
frame.setVisible ( true );
}
В этом примереzoom
собственность должна отскочить от1f в3f в пределах цикла таймера и, наконец, приведите отображаемое на компонентном изображении к 3-кратному увеличению. Что-то вроде простого анимированного перехода.
Класс FloatSpring должен быть в порядке - я просто не понимаю, как правильно его использовать. Чтобы быть точным - что я должен указать в качествеspringK
а такжеdampingK
значения, а такжеtime
Ценность собственности неясна ...
Я был бы очень признателен за любую помощь там.