dot_product()


数値計算・文字列・日付/時間

dot_product

ベクトル(x1,y1)とベクトル(x2,y2)の内積を求めます

構文

dot_product(x1, y1, x2, y2)
x1
最初のベクトルX
y1
最初のベクトルY
x2
2つめのベクトルX
y2
2つめのベクトルY

戻り値

Real
2つのベクトルの内積の値

説明

内積は2つのベクトルを乗算することで、そのベクトル間の角度を表現することができる値です。 実際の数式は次のように記述できます。

dot_product_image.png

GameMaker:Studioではベクトル(x1,y1)とベクトル(x2,y2)の内積は、x1x2 + y1y2となります。

a ・ b = (x1*x2)+(y1*y2);

内積の興味深いことは入力したベクトルのなす角度と関係していることです

a ・ b = (length of a) * (length of b) * cos(angle)

すなわち、2つのベクトルの内積は、ベクトル間の余弦に等しいことです。

dot_product_image_2.png

この内積の結果に関連して、いくつか述べることができる事実があります。

  • aとbが垂直(90度)である場合、cos(ang)はゼロとなるので、内積の結果はゼロになる
  • aとbが±90度より小さい場合、cos(ang)は正の値となるので、内積の結果は正の値となる
  • aとbが±90度を超える場合、cos(ang)は負の値となるので、内積の結果は負の値となる

これはゲームを作る上で何の役に立つのか? この事実は、かなりの状況で使用できますが、1つには視線・視界を定義することです。

dot_product_image_1.png

例えば、敵の視線方向と距離からなるベクトルと、敵の座標からみたプレイヤーへの方向ベクトルを計算し、正の値であれば敵はプレイヤーを発見、負の値であれば見つかっていない、という判定をすることができます

var x1, y1, x2, y2;
x1 = lengthdir_x(1, image_angle);
y1 = lengthdir_y(1, image_angle);
x2 = o_Player.x - x;
y2 = o_Player.y - y;
if dot_product(x1, y1, x2, y2) > 0 seen=true else seen=false;

上記コードは、インスタンスのイメージの角度からベクトルを作成し、 プレイヤー"o_Player"へのベクトルを計算します。 最後にこれら2つのベクトルの内積を計算し、それが0より大きければ 視界に入ったとし、そうでなければ見つかっていないとします

Wiki内検索

#search(): You already view a search box

MENU

ドキュメント

GMLリファレンス

2ch

その他



最新の30件

2019-11-16 2019-11-14 2019-09-27 2019-07-28 2019-07-12 2018-11-17 2017-11-07 2017-10-26 2017-10-01 2017-05-13 2016-10-01 2017-01-22 2017-01-14 2016-12-25 2016-10-09 2016-09-21 2016-08-29 2016-06-21 2016-02-23 2016-02-10 2016-01-18 2015-10-30 2015-10-20 2015-06-23 2015-06-20 2015-06-19

人気の10件

今日の10件



これまでの訪問者: 1220
今日の訪問者: 1
昨日の訪問者: 0
閲覧者: 3