Create animation
This commit is contained in:
1 parent
e5779665e0
commit
1d426f0b29
1 file changed
+44
@@ -0,0 +1,44 @@
|
|||||||
|
use symplectic_double_pendulum::*;
|
||||||
|
|
||||||
|
use macroquad::prelude::*;
|
||||||
|
|
||||||
|
fn draw(dp: &DoublePendulum, fg: Color) {
|
||||||
|
let rod_length = 120.0;
|
||||||
|
|
||||||
|
let pivot = vec2(screen_width() / 2.0, screen_height() / 2.0);
|
||||||
|
let bob1 = vec2(
|
||||||
|
pivot.x + rod_length * (dp.theta.sin() as f32),
|
||||||
|
pivot.y + rod_length * (dp.theta.cos() as f32));
|
||||||
|
let bob2 = vec2(
|
||||||
|
bob1.x + rod_length * ((dp.theta + dp.phi).sin() as f32),
|
||||||
|
bob1.y + rod_length * ((dp.theta + dp.phi).cos() as f32));
|
||||||
|
|
||||||
|
draw_line(pivot.x, pivot.y, bob1.x, bob1.y, 2.0, fg);
|
||||||
|
draw_line(bob1.x, bob1.y, bob2.x, bob2.y, 2.0, fg);
|
||||||
|
|
||||||
|
draw_circle(bob1.x, bob1.y, 8.0, fg);
|
||||||
|
draw_circle(bob2.x, bob2.y, 8.0, fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macroquad::main("Double Pendulum")]
|
||||||
|
async fn main() {
|
||||||
|
let omega = 500.0;
|
||||||
|
let h = 1e-3;
|
||||||
|
|
||||||
|
let mut state = Augmented::from(State {
|
||||||
|
q: DoublePendulum { theta: std::f64::consts::PI - 0.01, phi: 0.0 },
|
||||||
|
p: DoublePendulum { theta: 0.0, phi: 0.0 },
|
||||||
|
}, omega);
|
||||||
|
|
||||||
|
loop {
|
||||||
|
clear_background(WHITE);
|
||||||
|
|
||||||
|
let t = get_frame_time() as f64;
|
||||||
|
for _ in 0..((t / h) as i32) {
|
||||||
|
state.evolve(h);
|
||||||
|
}
|
||||||
|
draw(&state.average().q, BLACK);
|
||||||
|
|
||||||
|
next_frame().await
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user