性格:おちゃめ、温厚なれど、たまに凶暴
特技:飛ぶ、消える、壁にぶつからない
好きな季節:夏
好きな食物:リン
好きな場所:お墓
好きな時間:丑三(うしみつ)
将来の夢:社会貢献(世を明るく照らす)
皆さんへの注意:火傷
お願い:可燃物は与えないで下さい!
名称:ヒトダマ(俗称:火の玉)
JavaScript
ランダム フライング









多少、プログラムを変えていますが、トップページの★★★おみくじ★★★の回りを飛ぶ●と一緒です。
三角関数を利用して、一定範囲内を動かしています。関数によって動きが決まっているのならば、
規則性がありそうだと考えられたと思いますが、残念!、見つけることは不可能です。
速度の違いなども考慮に入れると
10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000通り以上の
パターンが存在すると思いますので、同じように見えても、ほぼ100%、消滅を境に動きが、
違っているはずです。と言うより、今、目にした動きは、二度と再び、見ることはないと思ってください。
ハッキリ言って、予測不可能な動きです。どう動くのかは、プログラムを書いた本人にも分かりません。
(乱数を使っているので、当たり前と言えば、当たり前の話ですが・・・)
ただし、消滅から消滅までの間は、規則性があります。しかし、その間隔が短い分、同じ軌跡を
拝見できるとは限りません。多分、無理な場合がほとんどです。

それぞれのパソコンの基本ソフトの数値精度にもよりますが、先ほどの、パターン数の根拠は、
三角関数を4個使用し、それぞれの引数に乱数(精度:16〜17桁)を代入していると言うことです。
要するに、単純に、16〜17桁の4乗と考えたわけです。数値自体の精度が16〜17桁ならば、
はじき出されるパターンの結果数も16〜17桁を超えることはない? はいはい、それが正解だと
思いますが、現実問題として、大きすぎて、16桁も64桁も大して違いがないように思います。
(上の格子付の檻部分に、それだけの数の線を書くことを考えただけで気が遠くなる)

まあ、とにかく、日本の国家予算(本会計の数倍とも言われる特別会計を含む)を
一円玉で集めた数よりも多いことは確かなので、今回、同じパターンが連続する確率は、
ひとつの一円玉に印を付け、それを、国家予算分の一円玉の入った箱に入れ、
十分、シャッフルした後、もう一度、箱に手を入れ、先ほど入れた印の付いた一円玉を
引き当てる確率より低いと言えます。


それは、さて置き、上の檻に入った火の玉の作り方は、
まず、ボール(●)とイメージ(背景用jpg、及び格子用jpg)をbodyタグ内に
divタグで、スタイルをabsoluteで宣言してください。

例(後に書いたものが上に乗る形になるので、この順番で書いてください。)
//ボールの動く背景部分(別途、back.jpgは作成してください)
<div style="position:absolute;top:38;left:300"><img src="back.jpg"></div>;
//ボール
<div id="myObjText" style="position:absolute;height:30pt;font-size:8pt;color:cyan">
●</div>

//格子(別途、hline.jpgは作成してください)
<div style="position:absolute;top:38;left:305"><img src="hline.jpg"></div>
<div style="position:absolute;top:38;left:313"><img src="hline.jpg"></div>
<div style="position:absolute;top:38;left:321"><img src="hline.jpg"></div>

以下、略。等間隔で位置を指定してください。


以下、ボールの動きの部分のプログラムです。
bodyタグでもheadタグでも、好きな場所に書いてください。

<script type="text/JavaScript">
<!--
//ページを開くと同時に実行される部分です。
if (document.all) {
//変数の宣言
  var rx;
  var ry;
  var dif1=0;
  var k=0;
  var kl=0;
//三角関数に代入する引数を乱数で決めます
  cosVal=Math.random()*7;
  sinVal=Math.random()*7;
  cosVal2=Math.random()*7;
  sinVal2=Math.random()*7;
//ボールの色を配列に代入します(色の変化を付ける為)
  Bcolor=new Array
("#ccffcc","#ffcccc","#ff9999",
"#ff6666","#ff3333","#ff0000",
"#ff0000","#ff0000","#ff6666",
"#ff0000","#ff6666","#ff0000",
"#ff6666","#ff0000","#ff6666",
"#ff0000","#ff0000","#ff3333",
"#ff6666","#ff9999","#ffcccc",
"ccffcc");
//タイマー関数で、ボールの動きの関数を一定間隔で実行させます
  window.setInterval('flip()',40);
}

//ここから、ボールの動きの関数です
function flip(){
//変化量を設定
dif1=dif1+0.05;
//オーバーフロー防止
if(dif1>1000){dif1=0}
//x座標、y座標を計算
rx =25*(Math.sin(sinVal*dif1)+Math.sin(sinVal2*dif1));
ry=10*(Math.cos(cosVal*dif1)+Math.cos(cosVal2*dif1));
//ボールの色と位置を目視可能にさせます
  if (document.all){
    document.all.myObjText.style.color= Bcolor[k];
    document.all.myObjText.style.pixelLeft = 350+rx;
    document.all.myObjText.style.pixelTop = 52+ry;
  }
//以下、次の動きをさせるための条件です
//タイマーが12×22=264回繰り返されたところで、次の動きに変わります
  kl=kl+1;
  if(kl==11){
    kl=0;
    k=k+1;
    if(k==21){
      k=0;
      cosVal=Math.random()*7;
      sinVal=Math.random()*7;
      cosVal2=Math.random()*7;
      sinVal2=Math.random()*7;
    }
  }
}
//-->
</script>


こんな簡単なプログラムで、生き物のような動きが出来るんです。
それも、あなたのパソコンの中だけの動きです。
生きている、そして、あなただけに見せる動きをしていると思うと、愛着が・・・・・・・
えっ? 沸かないですか?
・・・・・・失礼しました。

2006/2/15
格子があると目が疲れる?との苦情がありましたので、
ボタンで格子を移動できるようにしました。
格子をなくすと、ちょっと、いい気になって、はみ出しますが、
安心してください、逃げたりはしません。

2006/2/16
プログラムを書き変えました。檻を大きくして、
火の玉を3個(それぞれに変化のタイミング、範囲を指定)にして、
乱数の最大を3未満にして、火の玉の大きさも変化するようにし、
更に、パターンも消滅3〜7回で変化するようにしました。
目くらまし的効果で、ますます、規則性がカムフラージュ?