Processing/3.ライブラリの利用/3-3.ジョイント
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#navi(Processing/3.ライブラリの利用)
* 3-3-3 Fisicaのジョイント [#ra197657]
Fisicaではバネや回転軸をジョイントで実現する。
** バネ [#af7bf875]
バネはFDistanceJointで作成する。
すでに2つの物体body1, body2が作られているものとする。
FDistanceJoint spring;
spring = new FDistanceJoint(body1, body2);
world.add(spring);
で2つの物体の重心を結ぶバネが作成される。物体の重心以外の...
spring.setAnchor1( x1, y1 );
spring.setAnchor2( x2, y2 );
spring.calculateLength();
で、物体1, 2のそれぞれの重心に対する位置(x1, y1), (x2, y2...
バネの強さは、バネ定数ではなく、単振動の振動数fで設定する。
spring.setFrequency( f );
fが大きいほど強いバネになる。また、
spring.setDamping( b );
で振動の減衰率を設定できる。
次の例はバネで結ばれた2物体の一方を固定して吊り下げた状況...
import fisica.*;
FWorld world;
FBox b1, b2;
FDistanceJoint sp;
void setup(){
size( 400, 400 );
Fisica.init( this );
world = new FWorld();
/* 箱1(静止している) */
b1 = new FBox( 20, 20 );
b1.setStatic( true );
b1.setPosition( 200, 10 );
world.add( b1 );
/* 箱2(静止している) */
b2 = new FBox( 20, 20 );
b2.setPosition( 200, 100 );
b2.setDamping( 0 );
world.add( b2 );
/* バネ */
sp = new FDistanceJoint( b1, b2 );
sp.setAnchor1( 0, 10 );
sp.setAnchor2( 0, -10 );
sp.calculateLength();
sp.setFrequency( 0.5 );
sp.setDamping( 0 );
sp.setStroke( 255 );
sp.setStrokeWeight( 3 );
world.add( sp );
}
void draw(){
background( 0 );
world.step();
world.draw();
}
** 軸の周りの回転 [#d8363346]
回転軸はFRevoluteJointで作成する。
すでに2つの物体body1, body2が作られているものとする。
FRevoluteJoint rev;
rev = new FRevoluteJoint(body1, body2, x, y);
world.add(rev);
で2つの物体が点(x,y)を中心とする回転軸で接続される。
次の例は「振り子」を作る。マウスで球を動かすと振動する。
import fisica.*;
FWorld world;
FBox box;
FCircle ball;
FRevoluteJoint r;
void setup(){
size( 400, 200 );
smooth();
Fisica.init( this );
world = new FWorld();
box = new FBox( 20, 20 );
box.setStatic( true );
box.setPosition( 200, 10 );
world.add( box );
ball = new FCircle( 20 );
ball.setPosition( 200, 100 );
ball.setDamping( 0 );
world.add( ball );
r = new FRevoluteJoint( box, ball, 200, 20 );
r.setStroke( 255 );
r.setStrokeWeight( 3 );
world.add( r );
}
void draw(){
background( 0 );
world.step();
world.draw();
}
終了行:
#navi(Processing/3.ライブラリの利用)
* 3-3-3 Fisicaのジョイント [#ra197657]
Fisicaではバネや回転軸をジョイントで実現する。
** バネ [#af7bf875]
バネはFDistanceJointで作成する。
すでに2つの物体body1, body2が作られているものとする。
FDistanceJoint spring;
spring = new FDistanceJoint(body1, body2);
world.add(spring);
で2つの物体の重心を結ぶバネが作成される。物体の重心以外の...
spring.setAnchor1( x1, y1 );
spring.setAnchor2( x2, y2 );
spring.calculateLength();
で、物体1, 2のそれぞれの重心に対する位置(x1, y1), (x2, y2...
バネの強さは、バネ定数ではなく、単振動の振動数fで設定する。
spring.setFrequency( f );
fが大きいほど強いバネになる。また、
spring.setDamping( b );
で振動の減衰率を設定できる。
次の例はバネで結ばれた2物体の一方を固定して吊り下げた状況...
import fisica.*;
FWorld world;
FBox b1, b2;
FDistanceJoint sp;
void setup(){
size( 400, 400 );
Fisica.init( this );
world = new FWorld();
/* 箱1(静止している) */
b1 = new FBox( 20, 20 );
b1.setStatic( true );
b1.setPosition( 200, 10 );
world.add( b1 );
/* 箱2(静止している) */
b2 = new FBox( 20, 20 );
b2.setPosition( 200, 100 );
b2.setDamping( 0 );
world.add( b2 );
/* バネ */
sp = new FDistanceJoint( b1, b2 );
sp.setAnchor1( 0, 10 );
sp.setAnchor2( 0, -10 );
sp.calculateLength();
sp.setFrequency( 0.5 );
sp.setDamping( 0 );
sp.setStroke( 255 );
sp.setStrokeWeight( 3 );
world.add( sp );
}
void draw(){
background( 0 );
world.step();
world.draw();
}
** 軸の周りの回転 [#d8363346]
回転軸はFRevoluteJointで作成する。
すでに2つの物体body1, body2が作られているものとする。
FRevoluteJoint rev;
rev = new FRevoluteJoint(body1, body2, x, y);
world.add(rev);
で2つの物体が点(x,y)を中心とする回転軸で接続される。
次の例は「振り子」を作る。マウスで球を動かすと振動する。
import fisica.*;
FWorld world;
FBox box;
FCircle ball;
FRevoluteJoint r;
void setup(){
size( 400, 200 );
smooth();
Fisica.init( this );
world = new FWorld();
box = new FBox( 20, 20 );
box.setStatic( true );
box.setPosition( 200, 10 );
world.add( box );
ball = new FCircle( 20 );
ball.setPosition( 200, 100 );
ball.setDamping( 0 );
world.add( ball );
r = new FRevoluteJoint( box, ball, 200, 20 );
r.setStroke( 255 );
r.setStrokeWeight( 3 );
world.add( r );
}
void draw(){
background( 0 );
world.step();
world.draw();
}
ページ名: