Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 软件时空 > 工具软件 > 初级物理模型的构建(AS)-力学1 三星系统的构建
【标  题】:初级物理模型的构建(AS)-力学1 三星系统的构建
【关键字】:系统,AS,AS
【来  源】:网络

初级物理模型的构建(AS)-力学1 三星系统的构建

Your Ad Here 二星或三星系统相信大家在中学里都有所接触,三个球靠着彼此间的引力,围绕某一个固定点进行着各自的匀速圆周运动。这里,关键是要求出每个球做匀速圆周运动的运动半径,用的是求出两个质点的质心p后,再求p和第三个球的质心,即可得这个固定点,然后计算到各个点的距离即可(不算简单,第一屇全国中学生物理竞赛的决赛题)我只是理解,但要我完全自行解决,恐怕此生无此悟性矣~~~好了,我们只想知道那个求出各个球的运动半径的方程到底是什么,呈上:

 

function doV(mc1, mc2, mc3) {// r指的就是mc1的运动半径:

var r= Math.sqrt(mc2.m*mc2.m+mc3.m*mc3.m+mc2.m*mc3.m)/(mc1.m+mc2.m+mc3.m)*a;

mc1.v = Math.sqrt(mc1.fs*r/mc1.m); //根据向心力求匀速圆周运动速度

}

 

程序清单:

 

#include "Physics.as"

_root.onLoad=function(){

ball1.CreateBasicPhysicsFeature(1,0,0,0);

ball2.CreateBasicPhysicsFeature(1,0,0,0);

ball3.CreateBasicPhysicsFeature(1,0,0,0);

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

eval("ball"+i).CreateExtendMotionFeature(0,0,0,0);

eval("ball"+i).ForceCondition(0,0,0,0);

eval("ball"+i).ForcedirectionX(0);

eval("ball"+i).ForcedirectionY(0);

eval("ball"+i).VdirectionX(0);

eval("ball"+i).VdirectionY(0);

eval("ball"+i).ForcedirectionX(0);

eval("ball"+i).ForcedirectionY(0);

eval("ball"+i).fs(0);

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

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

}

G = 1000;

a = 100;//三者呈三角状态时的参数。

}

///***Fundamental Function***///

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;

}

function normal_vector(mc1){//求MC1沿顺时针绕MC2转的法向单位向量。

mc1.VdirectionX=mc1.ForcedirectionY;

mc1.VdirectionY=-mc1.ForcedirectionX;

}

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;

}

function return_fx_fy(){//每一帧的最后,把力归零。

var i=1;

while(i<4){

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

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

i++;

}

}

 

function doFsum(mc){

mc.fs=Math.sqrt(mc.fx*mc.fx+mc.fy*mc.fy);

}

function doV(mc1,mc2,mc3){

var r=Math.sqrt(mc2.m*mc2.m+mc3.m*mc3.m+mc2.m*mc3.m)/(mc1.m+mc2.m+mc3.m)*a

mc1.v=Math.sqrt(mc1.fs*r/mc1.m);

}

function doMove_Circle(mc){

mc.ForcedirectionX=mc.fx/mc.fs;

mc.ForcedirectionY=mc.fy/mc.fs;

normal_vector(mc);

mc.vx=mc.v*mc.VdirectionX;

mc.vy=mc.v*mc.VdirectionY;

mc._x+=mc.vx;

mc._y+=mc.vy;

}

///Combine Functions and do Motions///

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++;

};

}

}

function CaculateF(){

sumForce();

var j=1;

while(j<4){

doFsum(eval("ball"+j));

j++;

}

}

function CaculateV(){

doV(ball1,ball2,ball3);

doV(ball2,ball1,ball3);

doV(ball3,ball1,ball2);

}

function SumMove(){

var i=1;

while(i<4){

doMove_Circle(eval("ball"+i));

i++;

}

}

_root.onEnterFrame=function(){

CaculateF();

CaculateV();

SumMove();

return_fx_fy();

}

 

演示:三球的质量相等(不过好心中心点有小的偏移,望高人指点)

UploadFile/2004-8/200482115545747.swf

 

小结:

所以,我们可以看到,当我们的函数及构建的物理属性自成为一个体系的时候,实现物理现象变得越来越清楚而方便了,关键就是在于作好物理状况的分析,需要求哪些量,按怎样的一个顺序来操作,这些,少了任何一环,都会导致实验的失败。所以,比较扎实的物理水平,是作好这些实验的前提(自夸J).让后,只要想好想关的函数,如何进行调用,哪些需要反复调用,哪些只需要调用一次。(建议先在纸上写好,可以省去大量不必要的调试时间)再定义好相关的开关变量,以及将效果整合在一起的函数,往onEnterFrame中一放,哈哈,成功了。

 

大家可以看到,有了上述这些物理模型,很多flash小游戏的核心部分都已经解决了,如:

撞砖块(复制砖块+反弹方程+失败成功判定PS:小横杆在边缘处碰小球时返弹是照原路径回去),

射泡泡(射完后泡泡一变二+返弹判定+失败成功判定),

欢乐碰碰车(把小球碰撞实验里的碰撞系数改一下就会有很棒的效果了。)

做这些游戏起来是不是变得得心应手了?我有空一定要把这些小游戏都做一下,毕竟,用的是自家的体系,自成一派,感觉就是不一样。

好了,由于时间的关系,这次的专题就介绍到这里,我自已经列了一张表,还有一大堆激动人心的物理摸拟实验要作,这里,伴随着的,也是更高要求的编程能力,数学能力以及物理知识(比方说:把Vector类加入mc类中,用一个向量v便可代替两个分量vx,vy,还有:三维视觉效果的能实现话,那迎来的将是更为广阔的空间,更高级的碰撞检测要用到离散数学)希望高人能能有所指点。我会继续努力下去的,只因为在FLASH里,是我的梦想真正开始的地方……

如何使用Flash连接资料库(新手篇):【上一篇】
控制播放加载的MC的场景:【下一篇】
【相关文章】
  • 如何使用Flash连接资料库(新手篇)
  • Flash Action Script从头说起四-影片剪辑的属性设置方法
  • flash action 详解 第 4 章: 函数---函数的基本概念
  • flash action 详解 第 3 章: 条件和循环--综述
  • AS教程-光环飞舞效果的实现的实例
  • 谈谈Flash的一些语法基础和系统核心 2.8 对函数变量的引用
  • AS画圆
  • mtasc一个月使用经验小结
  • 用FLASH制作计数器
  • AS基础精典教程 第三章:解读
  • 【随机文章】
  • 合同有变化 ERP软件的处理方案
  • Tomcat中文手册(1)
  • 打印机灯闪和解决方法
  • 水彩画教程-painter 画静物(1)
  • cs8900a驱动移植笔记 (转)
  • CString实现原理(转载)
  • 翻译:Effective C++, 3rd Edition, Item 44: 从 templates(模板)中分离出 parameter-independent(参数无...
  • Maya 4.0 NURBS建模-编辑曲线(3)
  • DispatchAction 一点理解
  • GSM规范中的部分编码转换
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.