0253デフォルトの名無しさん
2020/04/20(月) 16:12:46.13ID:EsvxpnHBuse Tkx;
$top = Tkx::widget->new('.');
$c = $top->new_canvas(-width => 300, -height => 300);
$c->g_pack(-expand => 1);
($x0, $y0) = (150, 50);
$r = 200;
($v, $theta) = (0, 3.1415 * 40 / 180);
($x, $y);
$dt = 20;
sub show {
($x, $y) = ($x0 + $r * sin $theta, $y0 + $r * cos $theta);
$c->coords($stick, $x0, $y0, $x, $y);
$c->coords($ball, $x-7, $y-7, $x+7, $y+7);
Tkx::after($dt, \&show);
$a = -0.00098 * sin $theta;
$a *= $a * $v > 0 ? 0.95 : 1/0.95; # dumping
$dv = $a * $dt;
$dtheta = ($v + $dv/2) * $dt / $r;
$theta += $dtheta;
$v += $dv;
}
show;
$stick = $c->create_line($x0, $y0, $x, $y, -width => 2.0);
$ball = $c->create_oval($x-7, $y-7, $x+7, $y+7, -fill => 'gray');
Tkx::MainLoop();