2011年6月26日日曜日

HTML5 Canvas - 上からボールを落として跳ね返る

上からボールを落として跳ね返る様。重力があり跳ね返り係数があるのだ。オランダの科学者が重力はないといっており、他の著名科学者、物理学者が一定の賛同をしているようだ。これが本当なら重力がある前提で全ての物理の教科書がつくられている現代において、コロンブス並みの大発見になるかもとのことだ。僕は今覚えたばかりの重力を前提に跳ね返らせているわけだが、それでも自然にみえるものだ。何が正しくて何が本質かなどということはわからないものじゃ。


跳ね返り係数は、衝突後の速度を衝突前の速度で割り算して出すのだ。たしか。基本的に衝突後にスピードが遅くなるのはエネルギーが吸収されるからなんだと思うんだけど、基本的に衝突後にスピードが遅くなるのであれば、衝突前の方が速度の値は大きくなるわけなので、割り算結果としての跳ね返り係数は0〜1の間に収まる。0だと全てのエネルギーが吸収されて全く跳ね返らないということだ。

今知りたいのは、スーパーボールって係数はどの位なんだろう?というのと、斜め下から側面にぶつけたときって、やっぱ斜め上に行くって考え方であってるのか?っていうことだ。斜め上に行くものの重力の関係上放物線を描きながら下に行くイメージかなと思ってんだけどどうなんだろうか?

(やはりブログトップページからは絵が見られませんので、単一ページで見てください。)




code

<canvas id="game" width="300" height="300"></canvas>
<script type="text/javascript">
var canvas = document.getElementById("game");
var ctx = canvas.getContext("2d");

var p;
var c_w = canvas.width;
var c_h = canvas.height;

function init(){
 p = new Player(); 
}

init();

var tm;
tm = setInterval(main,10);

function main(){
 //画面のクリア
 ctx.clearRect(0,0,400,400);
 p.view();
}

function Player(){
 var obj = this;
 obj.size = 10;
 obj.x = 10; //円中心のx座標
 obj.y = 10; //円中心のy座標
 obj.v = 0; //初速度
 obj.g = 0.1; //重力加速度
 obj.h = 0.8; //跳ね返り係数
 
 obj.view = function(){
  if(obj.y >= c_h - obj.size/2){
   obj.y = c_h - obj.size/2;
   obj.v = -obj.v*obj.h + obj.g;
   if(obj.v >= 0) obj.v = 0;
  }else{
   obj.v = obj.v + obj.g; 
  }  
  obj.y = obj.y + obj.v; 
  ctx.beginPath()
  ctx.fillStyle = 'blue';
  ctx.arc(obj.x, obj.y, obj.size/2, 0, 360,false);
  ctx.font = "18px 'Monotype Corsiva'";
  ctx . fillText(obj.v, 30, 30);
  ctx.fill();
 }
}

</script>

0 件のコメント:

コメントを投稿