| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > ActionScript教程 > 文章正文 用户登录
新手速建海量软件
物理知识在FLASH世
浅谈应用按钮事件
浅谈AS的绘图功能
浅谈AS与物理运动
利用文本框制作简
初级物理模型的构
初级物理模型的构
初级物理模型的构
初级物理模型的构

初级物理模型的构建(AS)-力学1 力学的世界           

初级物理模型的构建(AS)-力学1 力学的世界

作者:佚名 来源:闪吧 作者: EmilMatthew 更新:2007-1-13 20:47:27 错误报告 我要投稿

首先引进几个函数:

a)计算两个物体之间的距离:

function Getdistance(mc1, mc2) {

return Math.sqrt((mc1._x-mc2._x)*(mc1._x-mc2._x)+(mc1._y-mc2._y)*(mc1._y-mc2._y));

}

b)计算mc1所受到的mc2的引力的单位方向向量:

function StardandlizeAngle(mc1, mc2) {

var l = Getdistance(mc1, mc2);

mc1.ForcedirectionX = (mc2._x-mc1._x)/l;

mc1.ForcedirectionY = (mc2._y-mc1._y)/l;

}

c)小应用---万有引力的计算。

function do_fx_fy(mc1,mc2){//可求出引力的分量fxfy;

var r = Getdistance(mc1, mc2);

StardandlizeAngle(mc1, mc2);

var tempForce = G*mc1.m*mc2.m/(r*r);

mc1.fx =mc1.ForcedirectionX*tempForce;

mc1.fy= mc1.ForcedirectionY*tempForce;

}



d)圆周运动中,求MC1沿顺时针绕MC2转的法向向量。

function normal_vector(mc){

mc.VdirectionX=mc.ForcedirectionY;

mc.VdirectionY=-mc.ForcedirectionX;

}



e)三个球彼此间的引力计算:

//先要换一下doForce公式,改成自加型:

function doForce(mc1,mc2) {

var r = Getdistance(mc1, mc2);

StardandlizeAngle(mc1, mc2);

var tempForce = G*mc1.m*mc2.m/(r*r);

mc1.fx += mc1.ForcedirectionX*tempForce;

mc1.fy += mc1.ForcedirectionY*tempForce;

}

//然后再求出每个球所受个总的FXFY

function sumForce(){

for(var i=1;i<4;i++){

var j=1;

while(j<4){

if(i!=j){

doForce(eval("ball"+i),eval("ball"+j));

}

j++;

};

}

}

//由于fx,fy 是累加的,所以最后应该归零。

function retrun_fx_fy() {

var i = 1;

while (i<4) {

eval("ball"+i).fx = 0;

eval("ball"+i).fy = 0;

i++;

}

}

好了,有了以上的基础,让我们来看几个例子吧,

1) 最接近真实情况的下雨效果:

我们在高中时都接触过这样一个物理现象,下雨时,雨滴所受到的阻力与其速度是成正比f=k*v,所以,雨滴下落时所做是,是加速度不断减小的加速运动,直到最后重力和阻力平衡,雨滴作匀速直线运动。(这里,还内嵌了一个监控程序达到效果时耗时的程序)

#include "Physics.as"

// 流体摩擦,关键在于f=k*v;

_root.onLoad = function() {

a.attachMovie("rain", "raine", 100);

a.raine.CreateBasicPhysicsFeature(1, 0, 0, 0); // 由于只关心Y方向,这里就把V当作Y方向的来处理了。

a.raine.g(2);

a.raine.fs(0);

a.raine.fr(0);

k = 0.3;

_global.begins = getTimer();

_global.ends = 0;

_global.Intervals = 0;

// trace(begins);

};

function doForce(mc) {//计算合力及加速度

mc.fr = mc.v*k;

mc.fs = mc.g-mc.fr;

mc.a = mc.fs/mc.m;

}

function Move(mc) {

mc.v += mc.a;

mc._y += mc.v;

}

function Debugger() {

v1 = _root.a.raine.v;

if (a.raine._y>450 && a.raine._y<460) {

ends = getTimer();

Intervals = ends-begins;

}

}

_root.onEnterFrame = function() {

doForce(a.raine);

Move(a.raine);

Debugger();

};

演示:

UploadFile/2004-8/2004821151554256.swf

2引力实验:

实现方式:1计算二者距离>>>力的角度>>>引力值>>>把引力在其单位向量上进行分解>>>算出x,y方向的加速度>>>进而求出速度>>>实现位移

程序清单:

#include "Physics.as"

_root.onLoad = function() {

G = 1000;

tempForce = 0;

balla.ForcedirectionX(0);

balla.ForcedirectionY(0);

balla.CreateBasicPhysicsFeature(1, 0, 0, 15);

ballb.CreateBasicPhysicsFeature(2, 0, 0, 20);

balla.CreateExtendMotionFeature(0, 0, 0, 0);

balla.fx(0);

balla.fy(0);

};

function Getdistance(mc1, mc2) {

return Math.sqrt((mc1._x-mc2._x)*(mc1._x-mc2._x)+(mc1._y-mc2._y)*(mc1._y-mc2._y));

}

function StardandlizeAngle(mc1, mc2) {

var l = Getdistance(mc1, mc2);

mc1.ForcedirectionX = (mc2._x-mc1._x)/l;

mc1.ForcedirectionY = (mc2._y-mc1._y)/l;

}

function doForce() {

r = Getdistance(balla, ballb);

StardandlizeAngle(balla, ballb);

tempForce = G*balla.m*ballb.m/(r*r);

balla.fx = balla.ForcedirectionX*tempForce;

balla.fy = balla.ForcedirectionY*tempForce;

balla.ax = balla.fx/balla.m;

balla.ay = balla.fy/balla.m;

balla.vx += balla.ax;

balla.vy += balla.ay;

}

function doMove() {

balla._x += balla.vx;

balla._y += balla.vy;

}

_root.onEnterFrame = function() {

doForce();

doMove();

};

演示:

UploadFile/2004-8/200482115206858.swf

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。