TI-Nspire & Chipmunk

スイングバイ

加速スイングバイ: 減速スイングバイ: require "physics" require "color" ----------------------- -- general functions -- ----------------------- function pV(x, y) return physics.Vect(x, y) end function sum(list) local result = ZERO for _, v i…

軌跡が描けるようにする。

-- 軌跡が描けるようにする。 -- オブジェクトごとに座標履歴を self として持っておく。 require "physics" require "color" ----------------------- -- general functions -- ----------------------- function pV(x, y) return physics.Vect(x, y) end f…

頂点の凹んだ多角形を作る

頂点の凹んだ多角形は、1 個の多角形としては作れないので、1 つのボディに複数のシェイプを貼り付けて作る。 -- 頂点の凹んだ多角形が作れるようにする。 -- 1 つのボディに複数のシェイプを貼り付ける。 -- pCompPoly クラスと pSpace:addCompPloy メソッ…

不等辺多角形クラスも作っておく。2

-- 不等辺多角形クラス pIrregPoly も作っておく。 -- あらかじめ図心を原点にもってきておく。 require "physics" require "color" ----------------------- -- general functions -- ----------------------- function pV(x, y) return physics.Vect(x, y)…

不等辺多角形クラスも作っておく。1

-- 不等辺多角形クラス pIrregPoly も作っておく。 require "physics" require "color" ----------------------- -- general functions -- ----------------------- function pV(x, y) return physics.Vect(x, y) end function sum(list) local result = ZER…

正多角形クラス pRegPoly も作っておく。

-- 正多角形クラス pRegPoly も作っておく。 -- static な囲い(fence())、static な連続線分(polyLine())も作れるようにしておく。 require "physics"; require "color" ----------------------- -- general functions -- ----------------------- funct…

chipmunk に万有引力を設定する 6 of 6, たくさん出して確かめてみる。

require "physics"; require "color" ----------------------- -- general functions -- ----------------------- function pV(x, y) return physics.Vect(x, y) end function sum(list) local result = ZERO for _, v in ipairs(list) do result = result +…

chipmunk に万有引力を設定する 5, 5 体で試してみる

-- n 体に拡張する。前回の表を pSpace のメソッド(★★ の部分)として実装した。 require "physics"; require "color" ----------------------- -- general functions -- ----------------------- function pV(x, y) return physics.Vect(x, y) end functio…

chipmunk に万有引力を設定する 4, n 体に拡張する

今、space.objects = {a1, a2, a3, ...... , an} のように、スペースに n 個の質点が投入してあるとする。各質点に働く force を次のような表で計算する。

chipmunk に万有引力を設定する 3, 2 体のままスペースクラスのメソッドにする

require "physics"; require "color" function pV(x, y) return physics.Vect(x, y) end function on.resize() W, H = platform.window:width(), platform.window:height() X0, Y0, UNIT = math.floor(W/2), math.floor(H/2), math.floor(H/6) end TICKING =…

chipmunk に万有引力を設定する 2, まず 2 体だけで考える

require "physics"; require "color" function pV(x, y) return physics.Vect(x, y) end function on.resize() W, H = platform.window:width(), platform.window:height() X0, Y0, UNIT = math.floor(W/2), math.floor(H/2), math.floor(H/6) end TICKING =…

chipmunk に万有引力を設定する 1

無次元化した形で設定する。すなわち として計算する(G は万有引力定数、M は質量の単位、T は時刻の単位、L は長さの単位)。 まず 2 体だけで考える。 posA -- A の位置。 posB -- B の位置。 massA -- A の質量。 massB -- B の質量。 vectAB = posB - p…

軸線、補助線を描く

--[[ x 軸、y 軸、補助線を引く(Grid クラスを追加した)。 --]] require "physics"; require "color" function pV(x, y) return physics.Vect(x, y) end function on.resize() W, H = platform.window:width(), platform.window:height() X0, Y0, UNIT = m…

数学座標系で座標が指定できるようにスクリプトを変更する

--[[ 前に作った chipmunk のスクリプト(http://ti-nspire.hatenablog.com/entry/2016/04/07/074001)は スクリーン座標系で座標を指定してそのままスクリーン座標で描画していたが今度は数学座標系で座標 が指定できるようにする。描画するときにスクリー…

物理エンジンを使う 12 of 12, 何かを組み合わせたものをどこかにたくさん実体化する

-- 物理エンジンを使う 12 of 12, 何かを組み合わせたものをどこかにたくさん実体化する require "physics" function pV(x, y) return physics.Vect(x, y) end DT = 1/30 ZERO = pV(0, 0) LARGE = physics.misc.INFINITY() W, H = platform.window:width(), …

物理エンジンを使う 11, static 専用の線分クラスも作っておく。

-- 物理エンジンを使う 11, static 専用の線分クラスも作っておく。 require "physics" function pV(x, y) return physics.Vect(x, y) end dt = 1/30 ZERO = pV(0, 0) LARGE = physics.misc.INFINITY() W, H = platform.window:width(), platform.window:hei…

物理エンジンを使う 10, 矩形クラスも作っておく

-- 物理エンジンを使う 10, 矩形クラスも作っておく require "physics" function pV(x, y) return physics.Vect(x, y) end dt = 1/32 ZERO = pV(0, 0) LARGE = physics.misc.INFINITY() W, H = platform.window:width(), platform.window:height() gravity =…

物理エンジンを使う 9, ボディー同士をバネで拘束する, DampedSpring()

-- 物理エンジンを使う 9, ボディー同士をバネで拘束する, DampedSpring() -- https://www.omnimaga.org/lua-language/chipmunk-physics/ を参考に一部クラス化した。 require "physics" function pV(x, y) return physics.Vect(x, y) end dt = 1/30 ZERO = …

物理エンジンを使う 8, ボディー同士を一定の距離で拘束する, PinJoint

-- 物理エンジンを使う 8, ボディー同士を一定の距離で拘束する, PinJoint -- 拘束条件を定義して、それを addConstraint(constraint) メソッドでスペースへ投入する。 require "physics" dt = 0.01 ZERO = physics.Vect(0, 0) pos1x, pos1y = 55, 5 -- ボー…

物理エンジンを使う 7, 何かを大量に実体化してみる

-- 物理エンジンを使う 7, 何かを大量に実体化してみる -- 一部だけクラス化する require "physics" W = platform.window:width() H = platform.window:height() dt = 0.01 gravity = 200 ZERO = physics.Vect(0, 0) elasticity = 0 friction = 0 ----------…

物理エンジンを使う 6, polygon shape を使う

-- 物理エンジンを使う 6, polygon shape を使う -- Shape のサブクラスには、CircleShape, SegmentShape のほかにもうひとつ PolyShape がある。 require "physics" W, H = platform.window:width(), platform.window:height() ZERO = physics.Vect(0, 0) d…

物理エンジンを使う 5, 力の作用を受けない床壁を Segment で作る

-- 物理エンジンを使う 5, 力の作用を受けない床壁を Segment で作る require "physics" W, H = platform.window:width(), platform.window:height() ZERO = physics.Vect(0, 0) dt = 0.01 gravity = 100 circleRadius = 45 circleMass = 1 elasticity = 0.8…

物理エンジンを使う 4, static な円に円をぶつける

-- 物理エンジンを使う 4, static な円に円をぶつける require "physics" W, H = platform.window:width(), platform.window:height() ZERO = physics.Vect(0, 0) dt = 0.01 gravity = 100 mass = 1 radius = W/30 inertia = physics.misc.momentForCircle(m…

物理エンジンを使う 3, 円を円にぶつける

-- 物理エンジンを使う 3, 円を円にぶつける require "physics" W, H = platform.window:width(), platform.window:height() dt = 0.01 gravity = 0 mass = 0.1 radius = W/30 inertia = physics.misc.momentForCircle(mass, 0, radius, physics.Vect(0, 0))…

物理エンジンを使う 2, 何かを重力に任せて落とす

--[[ 物理エンジンを使う 2, 何かを重力に任せて落とす 画面中央の上端から勢いをつけずにそのまま落とす。 円を描いてはいるがまだ Shape を設定していないので今のところ図形に意味はない。ただ質点を示しているだけである。 --]] require "physics" H = p…

物理エンジンを使う 1

横軸が時間。水色の点が、公式で計算した落下距離。 赤い線が、chipmunk の計算した落下距離。オレンジの点が、公式で計算した落下速度。 青い線が、chipmunk の計算した落下速度。 -- 物理エンジンを使う 1 -- バージョン 3.2 で Nspire に導入された 2D 物…