開発環境 |
Apache Flex SDK 4.13.0 |
|
FlashDevelop 4.7.1.1 |
実行環境 |
Microsoft Windows 8.1 (64bit) |
プロジェクトの種類 |
ActionScript 3/AS3 Project |
プロジェクト名 |
parabola2 |
Main.as
package
{
import flash.display.Graphics;
import flash.display.Sprite;
import flash.events.Event;
import mx.utils.StringUtil;
public class Main extends Sprite
{
private const xmax:Number = 640;
private const ymax:Number = 480;
private const g:Number = 9.8; // 重力加速度 m/s^2
private const v0:Number = 30; // 初速 30m/s = 108km/h
private const a0:Number = 45 * Math.PI / 180; // 角度
private const p:Number = 5; // 倍率
private const dt:Number = 0.1; // s
private var gr:Graphics;
public function Main()
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
var canvas:Sprite = new Sprite;
addChild(canvas);
gr = canvas.graphics;
// 補助線
gr.lineStyle(1, 0x000000);
gr.moveTo(0, 0);
gr.lineTo(0, ymax);
gr.lineTo(xmax, ymax);
draw1();
draw2();
}
private function draw1():void
{
const vx:Number = v0 * Math.cos(a0);
const vy:Number = v0 * Math.sin(a0);
gr.lineStyle(1, 0xff0000);
gr.moveTo(0, ymax);
for (var t:Number = dt; ; t += dt)
{
var x:Number = vx * t;
var y:Number = vy * t - g * t * t / 2;
trace(StringUtil.substitute("t:{0} x:{1} y:{2}",
t.toFixed(2), x.toFixed(2), y.toFixed(2)));
if (y < 0) break;
gr.lineTo(x * p, ymax - y * p);
}
}
private function draw2():void
{
var v:Number = v0; // 速度
var a:Number = a0; // 角度
var x:Number = 0;
var y:Number = 0;
gr.lineStyle(1, 0x0000ff);
gr.moveTo(0, ymax);
for (var t:Number = dt; ; t += dt)
{
var vx:Number = v * Math.cos(a);
var vy:Number = v * Math.sin(a);
vy -= g * dt;
v = Math.sqrt(vx * vx + vy * vy);
a = Math.atan2(vy, vx);
x += vx * dt;
y += vy * dt;
trace(StringUtil.substitute("t:{0} x:{1} y:{2} v:{3} a:{4}",
t.toFixed(2), x.toFixed(2), y.toFixed(2),
v.toFixed(2), (a * 180 / Math.PI).toFixed(2)));
if (y < 0) break;
gr.lineTo(x * p, ymax - y * p);
}
}
}
}
最終更新:2015年01月22日 09:53