2017-07-20 10 views
0

私はプールテーブルの周りを跳ね返り、問題に遭遇したボールをシミュレートしようとしています。 (ビューは上からテーブルを見下ろしている)。低速での反射の法則を尊重しないボディ

私はいつもボールが反射の法則に従って境界線から跳ね返りたいと思っています。右側の境界上のシミュレーションの終わりにAngle of incidence = angle of reflection

enter image description here

、ボールがそれに沿って転がるように見えます。なぜそれは反射の法則に従わないのですか?

例:https://jsfiddle.net/5sjx7oyw/

var Engine = Matter.Engine, 
    Render = Matter.Render, 
    World = Matter.World, 
    Bodies = Matter.Bodies, 
    Body = Matter.Body, 
    Vector = Matter.Vector, 
    Events = Matter.Events; 

// create an engine 
var engine = Engine.create(); 

var canvas = document.getElementById('canvas'); 

engine.world.gravity.y = 0; // gravity not needed in this app 

// create a renderer 
var render = Render.create({ 
    element: document.body, 
    canvas: canvas, 
    engine: engine, 
    options: {wireframes: true} 
}); 

var ball_options = { 
    density: 0.04, 
    restitution: 1,// 0 = no bouncing, 1 = 100% of kinetic energy bounce back 
    friction: 0, 
    frictionAir: 0.05, 
    inertia: Infinity 
}; 

var boundary_options = { 
    isStatic: true 
}; 

var ball = Bodies.circle(100, 150, 11, ball_options); 

var boundary_left = Bodies.rectangle(10, 160, 100, 200, boundary_options); 
var boundary_right = Bodies.rectangle(300, 160, 100, 200, boundary_options); 
var boundary_top = Bodies.rectangle(150, 10, 200, 100, boundary_options); 
var boundary_bottom = Bodies.rectangle(150, 300, 200, 100, boundary_options); 

// add all of the bodies to the world 
World.add(engine.world, [ 
    boundary_left, 
    boundary_right, 
    boundary_top, 
    boundary_bottom, 
    ball 
    ]); 

render.options.height = 300; 
canvas.height = 300; 
Engine.run(engine); 
Render.run(render); 

Body.applyForce(ball, { x: 0, y: 0 }, { x: 0.2, y: 0.5 }); 

答えて

1

私はライブラリの作成者の助けを借りて問題を解決しました。私のコードに以下を追加する

https://jsfiddle.net/8exLLLv6/55/

は、問題を修正しました:

Matter.Resolver._restingThresh = 0.1; 

は、より多くの情報のためgibhubページを参照してください。

0

コンピュータ内の数字は実数ではありません。彼らはintetersです。 'float'は 'floatのような数字'を意味します。 そのため、x軸の速度は0に連続的に減少しません。 コードでは、x軸の最初の速度はy軸の1より小さい。 x軸に「離散効果」が表示されます。 返品がほぼ1になると、実際のボールのように感じることができます。 ありがとうございます。

+0

私は「返還」を1に変更しました。申し訳ありませんが、私はまだ境界線を揺らす効果を得ていますか?あなたは私に例を教えていただけますか? –

+0

私はfrictionAir:0.00を提案します。 –

+0

はい、これは私に完全な反射を与えますが、私はボールが最終的に止まるようにしたいと思います。 –

関連する問題