#author("2019-05-21T23:33:16+09:00","default:qua","qua") * 3-4 Fisicaで扱う物体 [#ra197657] Fisicaで扱う物体には、剛体(FBody)、弾性体(FBlob)、これらをつなぐジョイント(FJoint)が用意されている。剛体には線分(FLine)、球(FCircle)、箱(FBox)、多角形(FPoly)がある。 #author("2019-05-21T23:36:41+09:00","default:qua","qua") - (x1, y1)から(x2, y2)までの線分は、 FLine stick; のように線分の型をもつ変数stickを用意し、 stick = new FLine(x1, y1, x2, y2); のように作成し world.add( stick ); で追加する。 - 中心(x,y)にある直径rの球 FCircle ball; ball = new FCircle(r); ball.setPosition(x,y); world.add(ball); - 中心が(x,y)、2辺の長さがw, h、傾きがth度の箱。傾き0ならばsetRotationは省略できる。 FBox brick; brick = new FBox(w, h) brick.setPosition(x, y); brick.setRotation( radians(th) ); world.add(brick); - 多角形は new FPoly() で作成し、vertex(x,y)で頂点を追加していく。例えば、 b = new FPoly(); b.vertex(10,20); b.vertex(40,20); b.vertex(10,60); b.vertex(10,20); world.add(b); で三角形が作成される。 - いくつかの部品からなる物体 FCompound を設定することもできる。例えば、次のコードは振り子のような形の部品を作る。 pend = new FCompound(); ball = new FCircle(20); ball.setPosition( 100, 100 ); thread = new FLine( 100, 0, 100, 100 ); pend.addBody( ball ); pend.addBody( thread ); 上記の部品に共通の設定を挙げておく。bodyはいずれかの物体を表す。 |body.setVelocity( vx, vy );|速度を指定する。| |body.setPosition( x, y );|重心の位置を指定する。| |body.setDensity( d );|密度を指定する。(指定がなければ1)| |body.setDamping( b );|抵抗力の係数(1/60秒で速度が(1-b)倍になる)を指定する。(指定がなければ0.5)| |body.setFriction( f );|摩擦係数(動摩擦係数、静止摩擦係数で共通)を指定する。摩擦力は垂直抗力のf倍となる。(指定がなければ0.5)| |body.setRestitution( e );|跳ね返り係数を指定する。(指定がなければ0.1)| |body.setRotation( th );|回転角度を指定する(単位はラジアン)| |body.setAngularVelocity( th );|重心の周りの回転角速度を指定する。| |body.setAngularDamping( b );|回転抵抗力の係数(1/60秒で角速度が(1-b)倍になる)を指定する。(指定がなければ0.5)| |body.setStatic( trueまたはfalse );|trueにすると物体は静止して動かない。(指定がなければfalse)| |body.setRotatable( trueまたはfalse );|trueにすると物体は回転できる。(指定がなければtrue)| |body.setGrabbable( trueまたはfalse );|trueにすると物体をマウスで動かせる。(指定がなければtrue)|