• ベストアンサー

x1 = x2; x2 = this._x;

FlashのActionScript勉強中のものです。これまでプログラミングの経験などはないものです。 よろしくお願いします。 Flashでマウスで対象のMCボールを投げるというtipsの中で下記のように書かれています。 「 投げたときのスピードや方向は何を求めれば計算できるかといえば、ボールを離した時の位置と、その直前の位置がわかりさえすれば求めることができます。 簡単にするために横方向、つまりx方向だけを考えることにします。ボールを離した時の位置(仮にx2とします。)、その直前の位置(仮にx1とします)がわかれば、x方向のスピードはx2-x1で求めることができます。 ボールを離した時のx2の位置はそのままボールの現在位置ですので、すぐわかりますが、 その直前の位置はどうやればわかるでしょうか? 結論から言うと直前の位置x1に前回計算したx2の位置を代入してやります。そうすると、常にx1はx2の直前の値が入ることになります。スクリプトで書くとこうなります。 x1 = x2; x2 = this._x; speed = (x2-x1); この3行の式をこの順番で延々計算を繰り返していると考えると、x2には現在の位置、x1には前回計算したときの現在位置つまり直前の位置が入っていることになります。そして、x方向のスピードspeedは常にx2とx1との差として求められています。 」 とあるのですが、なぜ x1 が直前の数値となるのかが上手く理解出来ません。 仮に _xが 1fpsで_x=5 2fpsで_x=10 3fpsで_x=20 4fpsで_x=40 5fps(現地点)で_x=55 だったとして、x1もx2も55という事なのでは??と思ってしまいます。 なぜ、x1に直前の値(例では4fpsでの_x=40)がx1に入ることになるのでしょうか? ご教授いただきたく思います。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.3

#2です。 説明の数値が変になっています。 > なぜそうなるかを1フレームずつ考えます。   ~   ~ > あとは繰り返しです。 の間を訂正させてください。 ----訂正↓-------------------------------- なぜそうなるかを1フレームずつ考えます。  1フレームで_x=5  … x1 = ? , x2=5 x1 = x2; で x1 には x2 が代入されますが, この時点で x2 は何も定義されていません。 したがって,x1 も未定義 undefined になります。 x2 = this._x; で x2 には,現在のx座標の値が入るので, x2 = 5 となります。  2フレームで_x=10 … x1 = 5 , x2=10 x1 = x2; で x1 には x2 が代入されますが, この時点で x2 の値は前のフレームで代入された値 5 になっています。 したがって,x1 = 5 になります。 x2 = this._x; で x2 には,現在のx座標の値が入るので, x2 = 10 となります。  3フレームで_x=20 … x1 = 10 , x2=20 x1 = x2; で x1 には x2 が代入されますが, この時点で x2 の値は前のフレームで代入された値 10 になっています。 したがって,x1 = 10 になります。 x2 = this._x; で x2 には,現在のx座標の値が入るので, x2 = 20 となります。 あとは繰り返しです。 ------------------------------------------- すみません。 以上,訂正でした。

goo2408
質問者

お礼

sassakunさん、tux_the_penguinさん、ご回答ありがとうございます。 1fps(_x =?) x1(未) = x2(未); x2(未) = this._x;(未) speed = (x2 - x1); (未)-(未) == (未) 2fps(_x =5) x1(未) = x2(未); x2(5) = this._x;(5) speed = (x2 - x1); (5)-(未) == (5) 3fps(_x =10) x1(5) = x2(5); x2(10) = this._x;(10) speed = (x2 - x1); (10)-(5) == (5) 4fps(_x =15) x1(10) = x2(10); x2(15) = this._x;(15) speed = (x2 - x1); (15)-(10) == (5) 5fps(_x =20) x1(15) = x2(15); x2(20) = this._x;(20) speed = (x2 - x1); (20)-(15) == (5) という感じで書き出しして一つ一つ書き出して順に確認してみて、理解出来た気がします。変数で代入する時は右から左へ計算が流れるようなかたちとなるところなどがポイントのような感じがしました。 大変参考になりました。 ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#35109
noname#35109
回答No.2

#1の方の書かれていることで良いと思います。 例で説明します。 まず訂正で, > 1fpsで_x=5 > 2fpsで_x=10   …   … と書かれていますが, fps はフレームレートの単位で frame per second (○ フレーム毎秒)のことです。 フレームレートは変化させないので,単にフレームという意味だとします。 1フレームで_x=5  2フレームで_x=10 3フレームで_x=20 4フレームで_x=40 5フレーム(現地点)で_x=55 物体が上のような座標を通過したとして, 1フレームごとに x1 = x2; x2 = this._x; speed = (x2-x1); が実行されたとすると, x1 と x2 には次のような値が入ります。  1フレームで_x=5  … x1 = ? , x2=5  2フレームで_x=10 … x1 = 5 , x2=10  3フレームで_x=20 … x1 = 10 , x2=20  4フレームで_x=40 … x1 = 20 , x2=40  5フレーム(現地点)で_x=55 … x1 = 40 , x2=55 なぜそうなるかを1フレームずつ考えます。  1フレームで_x=5  … x1 = ? , x2=5 x1 = x2; で x1 には x2 が代入されますが, この時点で x2 は何も定義されていません。 したがって,x1 も未定義 undefined になります。 x2 = this._x; で x2 には,現在のx座標の値が入るので, x2 = 5 となります。  2フレームで_x=10 … x1 = 5 , x2=10 x1 = x2; で x1 には x2 が代入されますが, この時点で x2 の値は 10 になっています。 したがって,x1 = 10 になります。 x2 = this._x; で x2 には,現在のx座標の値が入るので, x2 = 10 となります。  3フレームで_x=20 … x1 = 10 , x2=20 x1 = x2; で x1 には x2 が代入されますが, この時点で x2 の値は 20 になっています。 したがって,x1 = 20 になります。 x2 = this._x; で x2 には,現在のx座標の値が入るので, x2 = 20 となります。 あとは繰り返しです。 プログラムは普通上から実行されます。 もしかかれているプログラムが, x2 = this._x; x1 = x2; speed = (x2-x1); であれば, ご質問で書かれているように,x1 と x2 は常に等しくなります。  1フレームで_x=5  … x1 = 5 , x2=5  2フレームで_x=10 … x1 = 10 , x2=10  3フレームで_x=20 … x1 = 20 , x2=20  4フレームで_x=40 … x1 = 40 , x2=40  5フレーム(現地点)で_x=55 … x1 = 55 , x2=55 x2 = this._x; x1 = x2; ではなく, x1 = x2; x2 = this._x; なので,x1 と x2 の値は常に1フレーム分の差が開きます。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

シンプルに考えてみましょう 数学でA=2と言うときには 「A と 2 は等しい」 と読みますね ところがプログラミングでは 「A は 2 になる」と読みます。 (「Aに2を代入する」と書いてある本も多いと思います。同じ意味です) …なので一行めの x1=x2; は「x1の値はx2が今持っているものになる」で、二行めの x2=this._x; は「x2の値は現時点でのxの位置になる」です。そして3行めで「speedの値はx2からx1を引いたものになる」わけです。 今、5フレーム目だとしてxの位置が55だったとしても、まだ処理をしてないので、x2には4フレーム目で導き出したxの位置の値が入っているわけです。そしてこの状態で一行めの処理を始めます。 こんな説明でなにかわかることがあればいいのですが。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • x1とx2を独立、同一に分布している(iid)

    x1とx2を独立、同一に分布している(iid) (1)連続のランダム変数 (2)離散のランダム変数 だとします。 (1),(2)においてP[x1<=x2]は計算できるのでしょうか。 計算できるならば計算の仕方、値を算出できないのならばその理由を知りたいです。

  • 直線 x=-3-2t、y=4+t ...(1) と直線 x=-3+3t, y=-7+4t....(2)

    問題1 直線 x=-3-2t、y=4+t ...(1) と直線 x=-3+3t, y=-7+4t....(2)のグラフを書き、その交点を求めよ。 問題2 直線(1)、(2)のなす角をΘ(0°≦Θ≦90°)とするとき、CosΘを求めよ。 問題3 直線(1)と(2)について、それぞれの方向余弦のうち、xの値が正であるものを求めよ。 ⇔問題1はとけましたけど、問題2と3がわかりませんでした。 まず問題1は、x=-3-2t=-3+3s y=4+t=-7+4sとしました。sと置き換えたのは=とした時にtの値が同じとは限らないので、 結果 2t+3s=0 t-4s=-11となり、 t=-3、s=2となりました。 交点は(x、y)=(3.1)となりました(答) 問題2は (1)の方向ベクトルと(2)の方向ベクトルがどのようにしたら求めてよいのか解らないのでとけませんでした。 いままで学んだ内容だと、二点P1(-1,3),P2(2,-1)をとおる媒介変数tを表せという問題をといてきて、 単純にp1p2=(x-x1,y-y1) をやって方向ベクトルをもとめ、x=x1+tl,y=y1+tmの公式にしたがってx=-1+3t,y=3-4tと方向ベクトルを求めていたのですけど、 今回はx-x1にあたる部分が題意を読んで何処なのかわかりませんでした。 題意のx=-3-2t、y=4+t (1)と(2)の式からx1の部分をー3、y1の部分を4とみるのでしょうか? そうすると、x-x1、y-y1のx1とy1の部分はわかるのですけど、xとyが解らないので、引き算ができず、方向ベクトルが求まりませんでした。 答えをみるとl→=(-2,1)(1) m→=(-3、-4)(2)となってました。どうやったらこのように求まるのでしょうか? 問題3は手が付けられませんでした>_< だれかこの問題詳しく教えてください、宜しくおねがいします!!>_<

  • 円板の2点間の距離算出方法

    円状の板(円板)に印された目盛りの値を比較(差を算出)するアルゴリズについてアドバイスをお願いします。 例) 等間隔で0,1,2・・から始まり499で一周する目盛り付き円板があります。 円板なので、499の次は0に戻ります。 N分前の値がX1、現在の値がX2の時、|X2-X1|(変化量の絶対値)を求めたい場合、どのようにすれば効率良く差が求められるでしょうか? 回転方向は不定(X1とX2の大小関係は不明)、X1とX2の差は小さい方の値を採用(差の最大値は250)するという条件です。 当然、単純な引き算では片方が一回転していた場合(0を跨いでいた場合)に正しい計算になりません。 ある条件時に、片方の値に500を加算して差を求めなければいけないと思いますが、その条件が明確にわかりません。 アドバイス頂けると幸いです。 よろしくお願いします。

  • Excel: 近い値のセルの隣接セル同士の参照・抽出について

    Excel: 近い値のセルの隣接セル同士の参照・抽出について よろしくお願い致します。 題目ではうまく説明できず申し訳ありません。今、 X1   Y1   X2    Y2 1    35    1.1    50 2    40    2.9   81 3   20     5.3   2 4   10    5.6    15 5    22    10.0   25 6   11    18.4    10 (中略) 100   32    250.2   14 といった二つのデータ(X1,Y1)と(X2,Y2)があります(位置合わせがうまくできずすみません)。X1は整数、他は実数です。X2の値と値の間隔は不定です。 X2の値と最も近い値のX1の隣のY1を参照し、Y1×Y2の値をY3として出力したいと思っています。 具体的には、 X1    Y1    X2    Y2    Y3 1    35    1.1    50→   (1.1≒1)35×50=1750 2    40    2.9    81→    (2.9≒3)20×81=1620 3    20    5.3    2→    (5.3≒5)22× 2=44 4    10    5.6    15→   (5.6≒6)11×15=165 5    22    10.0    25   … 6    11    18.4    10 (以下略) と計算し、 X2    Y3 1.1    1750 2.9    1620 5.3    44 5.6    165 (以下略) といったデータにしたいのです。 Excelでこのような操作を行うことができるでしょうか。御教示ください。 できればマクロなどを使わない方法でお願いします。 よろしくお願い致します。

  • ボウリングの回転

    最近、ボウリング場へよく遊びにいくようになり、以前からやってみたいと思っていたフックボールは投げられるようにはなりました。でも、他の上手い人たちってボールに強い回転がかかっているんですよね。ピンにあたる直前まで斜めにシュワシュワッっていう感じに。僕の場合フックがかかりだしてからは斜め方向の回転が失われて、直進方向にゴロゴロと転がっていってるだけなんです。なぜこのような差があるのでしょうか?いろいろと調べて、中指は10時の位置で、投げた後は握手のフォームで…というのはできてると思うのですが。 使っているボールは11か12ポンドでスピードは23キロあたりです。腕力はあまり強くないほうです。どうか、アドバイスをよろしくおねがいいたします!

  • ダイナミックゴールドSL X100について

    アイアンのシャフトについて悩んでいます。 現在使用スペックはインプレスX、シャフトNS950S、1Wヘッドスピード49~50です。 アイアンショットがちらかってスコアがまとまらずリシャフトを検討しています。 候補は、ダイナミックゴールドSL X100を希望していますが、使えこなせるか心配です。 このシャフトについて詳しい方のご指導を賜りたく、宜しくお願いいたします。

  • 主成分分析について

    主成分分析について 現在、主成分分析の計算方法を勉強をしているのですが、主成分得点の求め方がわかりません。 例をあげて説明させていただくと、 x1 x2 x3 8 9 4 2 5 7 8  5  6 3  5  4 7  4  9 4  3  4 3  6  8 6  8  2 5  4  5 6  7  6 このようなデータを分析するとして、各変数の相関係数(X1X2 X2X3 X1X3)の値はわかりますし、計算方法もわかります。 またここから固有値もわかります。 しかしここからどうやって、主成分得点を求めればよいかわかりません。 どのように計算するのですか?よろしければご回答下さい。

  • 指数法則について

    x1=16、x2=4のときのy=x1^0.5x2^-0.5の値を求めるという問題で、y=2となるようなのですが計算のしかたが分かりません。 数学がさっぱりわからないので、詳しい解説を教えて頂けないでしょうか。 お願いします。

  • 【方程式・等式への利用】

    2つの関数をf(x)=8x^2+16x-k、g(x)=2x^3+5x^2+4xとおく。 ただし、kは実数 (1)-3≦x≦3の範囲の任意のxに対して、 常に、f(x)≦g(x)となるためのkの値の範囲は? (2)-3≦x1≦3、-3≦x2≦3の範囲の任意のx1、x2に対して、 常に、f(x1)≦g(x2)となるためのkの値の範囲は? 答え (1)k≧45 (2)k≧141 答えしかないので、 解説お願いしたいです(><)

  • (1/2)^x ・(1/2)^(3-x) の意味

    統計学入門の https://parco1021.hatenablog.com/entry/2020/05/18/210000 の7.3を解こうとしていて、頭がこんがらがってきました。 紙片の最初の式 P(X=x) = 3Cx・(1/2)^x ・(1/2)^(3-x) = (1/8)・3Cx =g(x) …の 「(1/2)^x」と「 (1/2)^(3-x)」の意味を教えて下さい。 (1/2)^x ・(1/2)^(3-x) は、xが0~3の値をとる限り、 どれも一定で1/8になりますよね・・・。 3個のボールそれぞれを(1)(2)(3)で表しますと、 3Cxの組み合わせの意味は以下のように理解しています: x=0の場合は1通り A: (空っぽ) B: (1)(2)(3) x=1の場合は3通り A: (1) B: (2)(3) ------------------------------ A: (2) B: (1)(3) ------------------------------ A: (3) B: (1)(2) x=2の場合は3通り A: (1)(2) B: (3) ------------------------------ A: (1)(3) B: (2) ------------------------------ A: (2)(3) B: (1) x=3の場合は1通り A: (1)(2)(3) B: (空っぽ) ・・・ですよね。 全部で8通りあるので、各x通りを8で割るのは理解できます。 でも、その1/8を出すのに、(1/2)^x ・(1/2)^(3-x)の計算は必要ですか? あ、もしかして 「(1/2)^x」は成功の確率で 「 (1/2)^(3-x)」は失敗の確率ですか? でも、掛け合わせると何になるんですか? ※ ちなみに、ボールはつぼA, Bのどちらかには入る前提らしく、どちらにも入らないケースは考えないようです(問題の文脈だと曖昧ですよね…)。