forked from: 力学的エネルギー保存の法則って保存してないないじゃん!!
forked from 力学的エネルギー保存の法則って保存してないないじゃん!! (diff: 21)
ActionScript3 source code
/**
* Copyright uwi ( http://wonderfl.net/user/uwi )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/c4Pe
*/
// forked from kawamu's 力学的エネルギー保存の法則って保存してないないじゃん!!
package {
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.Graphics;
import flash.text.TextField;
import flash.events.Event;
public class FlashTest extends Sprite {
// 時間幅を10分の1にしてみた。
// _xを用意したのは、今回はあまり関係ないけど
// Sprite等のxは小数点1位でちょんぎられることがあるので
// シミュレーションにはNumberのxを別に用意しておいた方が良い
// さて、このシミュレーションだと時間幅が元のときよりエネルギーの振れ幅が
// 10分の1ぐらい。
// バネの運動を時系列で書くとサインカーブ。
// これは曲線なので下のシミュレーション方法では完全に再現できない。
// もっとかくと、時間幅の間のカーブの傾きを、時間幅の最初の接線の傾きと決めつけて
// 足しているからブレるのだ。
// 精確に動かしたいのであれば時間幅を小さくするか、
// 心情的に許されないと思うが最初から三角関数を使うか、かな
// おっぱい飲みたい
//力学的エネルギー保存の法則をチコチコ書いてみた。
//動きはバネ運動。
//E=0.5*m*v*v+0.5*k*x*x
//で、Eが一定になるってやつ。
//なんか動きうまく言っている感じ。
//まさにバネ。
//しかし、おやおやおや。
//現在のエネルギーも一定じゃないし、なんかちょっとずつ発散している!!
//なんじゃこりゃ。
//いや、まてよ。そもそも力学的エネルギー保存の法則って何だ?
//俺はいままで騙されていたのか?
//日教組かフリーメイソンの陰謀か?
//はたまた、第三機関の陰謀なのか!
//このエネルギー保存則で日本国民を騙そうとしているに違いない。
//え、なにをって?
//・・・・・・
//う--ん、なんだろ。
//ほら、エネルギーが枯渇するってマスコミがいうじゃん。
//そういうの。
//おれは、目覚めてしまった。
//これか気づきなのかぁぁ-
//そうなると我が身が危ない。
//自主管理能力の時代に突入だ。
//これもエンロンに盗聴されているかもしれない。
//あ、エシュロンか。
//わざと間違えちゃった。
//
//あれ、いつまでたってもCIAがこないぞ。
//窓、割られないようにあけておいたのに。
//陰謀は関係ないのかな?
//そうなると気づきではなかったのかな。
//あぁ、気づきでないことに気づいてしまったぁ
//では、なんだ?
//単なるFlashの端数の取り扱い?
//にしてはちょっと数値が大きいような・・・
//それともコードの書き間違いなのか?
//にんげんだもの
//それとも、計算のタイミングなのか?
//すべて動き終わった後に計算してるけど、それだと遅いのか?
//キッチリ保存されている様子を見せて!
//そもそも、力学的エネルギー保存の法則を誤解しているのか?
//おおいにあり得る。よくやる。
//
//おしえて、偉い人。
//
private var m:Number=1;
private var k:Number=.03;
private var maxE:Number=.0;
private var tf:TextField;
private var px:Number;
private var py:Number;
private var m_mc:MovieClip;
private var _x:Number;
public function FlashTest() {
// write as3 code here..
tf=new TextField();
addChild(tf);
tf.width=300;
tf.height=100;
tf.multiline=true;
//
m_mc=new MovieClip();
var m_g:Graphics=m_mc.graphics;
m_g.beginFill(0xFF0000);
m_g.drawCircle(0,0,30);
m_mc.ax=0;
m_mc.vx=0;
px=stage.stageWidth*0.5;
m_mc.x=px-200;
_x=px-200;
m_mc.y=stage.stageHeight*0.5;
addChild(m_mc);
addEventListener(Event.ENTER_FRAME,ent);
}
private function ent(evt:Event):void {
m_mc.ax=(k*(px-m_mc.x))/m;
m_mc.vx+=m_mc.ax*0.1;
_x+=m_mc.vx*0.1;
m_mc.x=_x;
var E:Number=.5*m*Math.pow(m_mc.vx,2)+.5*k*Math.pow(px-_x,2);
if (E>maxE)maxE=E;
tf.text="現在のエネルギー::"+E+"\n最大エネルギー::"+maxE;
}
}
}