パッケージ
クラス名
taustation_geom2d.MovingAgent
クラス仕様
概要
自分の位置を表すVectorオブジェクトと移動速度を表すVectorオブジェクトを要素に持ち、他のMovingAgentとの位置関係を判定するメソッドを準備している。
なお、Vectorクラスには、Vectorを位置ベクトルとしたときに、その点とMovingAgentとの位置関係を表すメソッドが用意されている。
クラス変数
なし
クラス・メソッド
なし
インスタンス・プロパティ
コンストラクタ
constructor()
- 位置(0, 0)、速度(0, 0)のMovingAgentインスタンスを生成する。
インスタンス・メソッド
基本メソッド
setPosition(x, y)
- MovingAgentの位置をx、yの座標値で指定する。
setVelocity(vx, vy)
- MovingAgentの速度をvx、vyの成分で指定する。
getClone()
- 元のMovingAgentオブジェクトと同じ内容のクローンを生成して返す。
判定
isInFrontOf(other)
- このMovingAgentオブジェクトが引数のMovingAgentオブジェクトの前方(左右180度より進行方向の側)にあるときtrue、後方にあるときfalseを返す。真横の時は前方と判定される。
isIntheRearOf(other)
- isInFrontOf()と前後逆の判定結果を返す。
isOnTheRightOf(other)
- このMovingAgentオブジェクトが引数のMovingAgentオブジェクトの右方にあるときtrue、左方にあるときfalseを返す。進行方向の延長線上にあるときは右方と判定される。
isOnTheLeftOf(movingAgent)
- isOnTheRightOf()と左右逆の判定結果を返す。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
class MovingAgent constructor: -> @pos = new Vector(0, 0) @v = new Vector(0, 0) return # 個体の位置をセットするメソッド setPosition: (x, y) -> @pos.x = x @pos.y = y return # 個体の速度をセットするメソッド setVelocity: (vx, vy) -> @v.x = vx @v.y = vy return # 自身と同じ内容のMovingAgentオブジェクトを生成して返す getClone: -> clone = new MovingAgent() clone.setPosition(@pos.x, @pos.y) clone.setVelocity(@v.x, @v.y) return clone # 以下、他のMovingAgentとの位置関係 # # このMovingAgentが引数のMovingAgentの前方か isInFrontOf: (other) -> inprod = other.v.x * (@pos.x - other.pos.x) + other.v.y * (@pos.y - other.pos.y) if inprod >= 0 then true else false # このMovingAgentが引数のMovingAgentの後方か isInTheRearOf: (other) -> not @isInFrontOf(other) # このMovingAgentが引数のMovingAgentの右方か isOnTheRightOf: (other) -> inprod = other.v.y * (@pos.x - other.pos.x) - other.v.x * (@pos.y - other.pos.y) if inprod >= 0 then true else false # このMovingAgentが引数のMovingAgentの左方か isOnTheLeftOf: (other) -> not @isOnTheRightOf(other) |