ActionScript初心者のためのMath.floorについての質問

このQ&Aのポイント
  • マイナス10から10までの範囲の整数値を得たい場合、Math.floor()メソッドを使用します。
  • Math.random() * 21 - 10 という計算式を使います。
  • 最小値は-10、最大値は10となります。
回答を見る
  • ベストアンサー

ActionScript 初心者です。Math.floorについて

すみませんが教えて下さい。 参考書より 「-10~10までの範囲の整数値」であれば、小数部分を切り捨てるMath.floor()メゾットを使って「Math.floor(Math.random()*21)-10」となります。 Marh.random()が0だと「Math.floor(Math.random()*21)」の部分は「Math.floor(0*21)」となり0になります。 つまり「Math.floor(Math.random()*21)-10」の最小値は-10になります。 Math.random()が約1だと「Math.floor(Math.random()*21)」の部分はMath.floor(1*21)となり、約21(20.99999999・・)の少数部分を切り捨てて20になります。したがって「Math.floor(Math.random()*21)-10」の最大値が10になることが分かります。 とありますが、いろいろ調べても概念がさっぱりわかりません。 詳しい方、噛み砕いて教えて頂けるととてもありがたいです。 こんな質問ですみません。よろしければよろしくお願い致します。

  • Flash
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • 15mm
  • ベストアンサー率65% (65/100)
回答No.1

Math.random()は 0≦n<1(1にはならない)を満たすnを返す関数であるというのは大丈夫でしょうか? そこに21を掛けると、 0≦n<21 Math.floor()は小数部を切り捨てるので0≦n≦20.99999999999・・・と考えると n=0,1,2,・・・,19,20 そこから-10なので n=-10,-9,-8,・・・,9,10 となり、 -10≦n≦10(n:整数) の範囲のnをランダムで生成することができます。 一般的に乱数に範囲を付ける場合は最大値MAX、最小値MINとすると、 Math.floor(Math.random()*(MAX-MIN+1))-MIN と表されるようです。 実際にゲーム製作なんかしてると特にそんな処理をすることはほとんど無く (Math.random()*(範囲))>>0    >>0:0ビットシフトで少数未満切り捨て(正の数限定、処理高速) と0からの乱数を得たほうが便利なことのほうが多いです。

kokoro697
質問者

お礼

とてもわかり安かったです。 ありがとうございました。

関連するQ&A

  • Math.floorがうまく動きません…

    Flase8初心者です。 NowLoading画面に%を表示させようと思いスプリクトを書いたのですが、 Math.floorがうまく動かないのか小数点以下まで表示されてしまいます。  スプリクトは下記のものです。 this.onEnterFrame = function() { Parcent = (_root.getBytesLoaded()/_root.getBytesTotal()*100); Parcent_txt.text =Math.floor(Parcent); if (Parcent == 100) { _root.play(3); } }; _root.stop(); どこかに間違いがあるのでしょうか? 回答、よろしくお願い致します。

    • ベストアンサー
    • Flash
  • ActionScript3.0について…

    ある課題で下記の条件を満たしたものを制作するというものがありまして、 制作してみたんですが、回答例と異なっていました。 私が制作したものでは、なにか間違っているのか分かりませんので質問させていただきました。よろしくお願いいたします。 ☆☆☆ 条件 ☆☆☆ ★ _mcの移動幅を5~10もしくは-10~-5の範囲になるようにします。 ★ 縦方向、横方向ともにステージの端まで移動したら反転するようにします。 ※ステージ幅は400px、高さは300pxとします。 ※条件ではありませんが、この問題を解くヒントとして、 「移動幅は2分の1の確率で-1を掛ける」と 「2分の1を表す条件式の例としては[ Math.random < 0.5 ]が考えられます。」とあります。 ☆☆☆ 回答例 ☆☆☆ var stepX:int = Math.floor(Math.random() * 6) + 5; var stepY:int = Math.floor(Math.random() * 6) + 5; if (Math.random() < 0.5){ stepX *= -1; } if (Math.random() < 0.5){ stepY *= -1; } _mc.addEventListener(Event.ENTER_FRAME, xEnterFrame); function xEnterFrame(evt) { _mc.x += stepX; _mc.y += stepY; if (_mc.x >= 400 || _mc.x <= 0){ stepX *= -1; } if (_mc.y >= 300 || _mc.y <= 0){ stepY *= -1; } } ☆☆☆ 私が書いたもの ☆☆☆ var stepX:int = Math.floor(Math.random() * 6) + 5; var stepY:int = Math.floor(Math.random() * 6) + 5; _mc.addEventListener(Event.ENTER_FRAME, xEnterFrame); function xEnterFrame(evt) { _mc.x += stepX; _mc.y += stepY; if(_mc.x > 400 || _mc.x < 0){ stepX *= -1; } if(_mc.y > 300 || _mc.y < 0){ stepY *= -1; } } あくまでもヒントでしたので、私が書く際にはヒントを見ずに書きました。

    • ベストアンサー
    • Flash
  • JavaScriptを使ってロト6の当選数字を予想するプログラムを考えたのですが・・・

    Math.floor(Math.rondom()*10);を使うと、小数点以下の数字を出さない。 と先生に教えられたのですが、 ((Math.floor(Math.random() * 10)) + (Math.floor(Math.random() * 10))) * (Math.floor(Math.random() * 10)) + 1; を変数に入れて、テキストボックスに出力してみると、なんと小数点が出てしまいます! しかも、27.5や59.5などと、ちょうど0.5が出てしまいます。 この0.5を出さないように、ランダムで数字を出したいのですが、Math.floor以外で使えるものがあったら教えてください。 よろしくお願いします。

  • actionscript 3.0 初心者です

    以下の3つの質問にご回答いただければ幸いです。 以下の参考にさせていただいている、スクリプトにて 1、random関数の()の後に来る数字はどのような範囲を意味しているのでしょうか? 2、sList[i].vx = Math.random() -0.5;という記述について、これはあるオブジェクトの 落下(進行)の速度を示しているらしいのですが、その手前の記述で、 private var vx:Number = 0;という記述があります。自分で定義したものをプロパティーとして使い事はできるのでしょうか?(もしくわこのvxはarrayのプロパティとして使われていると考えてよろしいのしょうか?) 3、なぜ速度をわざわざ配列で記入する必要があるのでしょうか? 多岐にわたっておりますが、是非よろしくお願い致します。 package{ import flash.display.Sprite; import flash.display.MovieClip; import flash.geom.Matrix; import flash.events.Event; import flash.filters.BlurFilter; public class Main extends Sprite { private var snow:Ball;     private var num:int = 200; private var sList:Array = []; private var vx:Number = 0; public function Main(){ for(var i:int = 0; i < num; i++){ var snow:Ball = new Ball(2,0xaaffff) //初期位値 snow.x = Math.random() * stage.stageWidth; snow.y = Math.random() * stage.stageHeight; //大きさを生成順に小さく snow.scaleX = snow.scaleY = 1 / (0.02 * i + 1); //配置して配列に入れる addChild(snow); sList.push(snow); //それぞれのx方向の速度設定 sList[i].vx = Math.random() -0.5; } addEventListener(Event.ENTER_FRAME,go1); } private function go1(evt:Event):void{ for(var i = 0; i < num; i++){ //x方向とy方向の動き設定(奥のものほど遅くなる) sList[i].x += sList[i].vx / (0.02 * i + 1); sList[i].y += 4 / (0.02 * i + 1); //ステージ外(下)に出たら移動 if(sList[i].y > 400){ sList[i].x = Math.random() * stage.stageWidth; sList[i].y = 0; } } } } }

    • ベストアンサー
    • Flash
  • Javascript について質問です。

    Math.floor(Math.random()*5 + 1) 上記の構文の意味について教えてください。 Math.random()が、0-1の間のどれかの数字を出力し、そのどれかの数字を*5しており、もし少数点が出たら、Math.floorで端数をきり、最後に+1するということでよろしいでしょうか? 自分が参考にしているサイトは、下記のように書かれてありました。 ”0-4の間の数字から、1から5までの数字の間までの数字を変化させる” 上記の文についてですが、0-5までで、1-6まで変化させることを表していると思うのですが、どうですか? 教えてください。

  • integerクラスとMathクラス

    適当な整数numをキーボードから入力し、その回数だけ0から360までの整数をランダムに発生させ、その整数を角度(弧度法)とみなしたとき、その正接(tan)が最大のとなる整数を表示するプログラム を以下の手順で下記に作成した結果、角度が同じ値になります。これはどうしてですか?また、手順通りのプログラムにするにはどのようなプログラムて適切ですか?     手順      (1)最大値となる角度を代入する整数型の変数maxを初期値-90で定義する。      (2)乱数を発生させる回数を入力する。      (3)0から360までの整数を、乱数を使って1つ発生させ、整数型の変数degに保存。この値を表       示する。      (4)角度degをラジアンに変換し、実数型の変数radに代入し、表示する。変換は             rad = deg * Math.PI/180.0 (Math.PIは円周率を表す)       で行なうことができる。ただし、実際のプログラムでは上式をそのまま書くのではなく、変数       の型に注意して記述すること。      (5)radを用いて正接(tan)を計算する。      (6)maxから計算されるtanの値と比較し、(4)の結果の方が大きければmaxをdegに書き換え       る。      (7)(2)から(5)を入力した回数になるまで繰り返す      (8)maxを表示する。import java.io.*; class Kakudo3 { public static void main(String args[]) throws IOException { int max = -90; System.out.println("整数を入力"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); int num = Integer.parseInt(str1); int deg =(int)(Math.random()*360); for(int i=0; i<num; i++){ System.out.print(deg+","); } double rad = deg*Math.PI/180.0; Math.tan(rad); } }

    • ベストアンサー
    • Java
  • 配列変数に重複のないランダムな数字を入れて行くには?

    JavaScript初心者です。 配列にランダムな数字を入れたいのですが、 aRnd = new Array(); aRnd[0] = Math.floor(Math.random()*100); aRnd[1] = Math.floor(Math.random()*100); aRnd[2] = Math.floor(Math.random()*100); のようにやると各配列にはランダムな数字が入りますが、重複が発生する可能性があります。これを重複が発生しないようにしたいのですが、どのようにすればいいのでしょうか? なお、上記例では0~99までの数字を3つの配列にセットする方法となっていますが、配列数や数字の最大値は変更する可能性があるので、これも配慮したいと思います。 よろしくお願いいたします。

  • AS3.0に書き換えたいです

    みなさま始めまして、最近AS3.0を始めたばかりでして 右も左もわからない者です。 以前に、AS2.0でインスタンスを右方向にランダム移動させる プログラム(右上方向にいったり右下方向にいったり)を作っていたのですが、 AS3.0で使いまわそうと思ったところ、エラーになってしまい、 作業が止まってしまいました。 参考書などは買っていますが、覚えるのにかなり時間がかかりそうなので、 とりあえず今急いで教えてもらいたく質問させてもらいました。 よろしくお願い致します。 AS2.0で書いたスクリプトです これをAS3.0用に書き換えたいです this.onEnterFrame = function() {   _y -= Math.floor(Math.random()*3)-1;   _x -= Math.floor(Math.random()*5)-3; }; 本当に初歩的な質問でご迷惑おかけしますが、よろしくお願い致します。

    • ベストアンサー
    • Flash
  • ルートの計算問題で考え方と答えが合っているか見て頂けませんでしょうか?

    問(1)√3の整数部分をa、少数部分をbとした時、ab^2の値を求めなさい。 まず整数部分をもとめる。 √3の前後に1つずつ√(2乗で整数に出来るルート)を書く。 √1<√3<√4 1<√3<2 よって√3の整数部分はa=1 また、√3の小数部分はb=√3-1 (平方根-整数部分) ab^2=1×(√3-1)^2 =(√3)^2+2√3×(-1)+(-1)^2 =3-2√3+1 =4-2√3 問(2)√43の整数部分をa、少数部分をbとした時、ab^2の値を求めなさい。 √36<√43<√49 6<√43<√49 よって√43の整数部分はa=6 また、√43の小数部分はb=√43-6 ab^2=6×(√43-6)^2 =6×(√43)^2-12√43+36 =6×1849-12√43+36 =11094+36-12√43 =11120-12√43 問(3)√10の整数部分をa、少数部分をbとした時、(a-b)^2の値を求めなさい。 √9<√10<√16 3<√10<4 よって√10の整数部分はa=3 また、√43の小数部分はb=√10-3 (a-b)^2=(3-(√10-3))^2 =(3-√10+3)^2 =(6-√10)^2 =36-12√10+√100 =36-12√10+10 =46-12√10 長々と見ていただきありがとうございます。 合っていないところがあれば、教えてくださいよろしくお願いします。

  • テキストフィールドの小数点表示について

    テキストフィールドに表示される数値の小数点以下をさせない方法はありますか? Math.floorなどを使うと問題があるのでテキストフィールドの表示だけを整数にしたいのです。 環境はFlashMXを使っています。

    • ベストアンサー
    • Flash

専門家に質問してみよう