精华内容
下载资源
问答
  • 弹性运动框架

    2016-08-26 20:11:50
    1、长得一样的东西,观察规律,看相同点和区别,会有发现。 2、世间的运动或现象,观察并发现规律,可以尝试用代码描述。 3、摩擦力是为了让目标物体停止。 4、

    1、长得一样的东西,观察规律,看相同点和区别,会有发现。

    2、世间的运动或现象,观察并发现规律,可以尝试用代码描述。

    3、摩擦力是为了让目标物体停止。

    4、相同原理,数值不同出现的结果可能差别很大

    5、<style>
            #div1{width:100px;height:100px;background: red;
                position: absolute;left:0;top:50px;}
        </style>
        <script>
            window.οnlοad=function() {
                var oBtn=document.getElementById('btn1');
                var iSpeed = 0;
                oBtn.οnclick=function(){
                    startMove();
                };
                function startMove() {
                    var oDiv = document.getElementById('div1');
                    setInterval(function () {
                            iSpeed+=(300-oDiv.offsetLeft)/5;
                            iSpeed*=0.7;
                        oDiv.style.left = oDiv.offsetLeft + iSpeed + 'px';
                    }, 30);
                }
            }
        </script>
    </head>
    <body>
    <input id="btn1" type="button" value="开始运动"/>
    <div id="div1"></div>
    <div style="position:absolute;left:300px;width:1px;height:300px;background:#000000;"></div>
    </body>
    </html>

    展开全文
  • 弹性运动在生活中类似考虑阻力的单摆运动,即在指定位置的左右摇摆最后停在指定位置,代码如下 html代码 <div></div> <span></span> css代码 div { width: 100px; height: 100px; ...

    弹性运动在生活中类似考虑阻力的单摆运动,即在指定位置的左右摇摆最后停在指定位置

    基础代码

    html代码

    <div></div>
    <span></span>

    css代码

    div {
        width: 100px;
        height: 100px;
        background-color: steelblue;
        position: absolute;
        top: 0;
        left: 0;
        cursor: pointer;
    }
    span {
        width: 1px;
        height: 100px;
        background-color: black;
        position: absolute;
        top: 0;
        left: 300px;
    }

    js代码

    var oDiv = document.getElementsByTagName('div')[0];
    var span = document.getElementsByTagName('span')[0];
    oDiv.onclick = function () {
        startMove(this,300)
    }
    function startMove(dom, target) {
        clearInterval(timer);
        var speed = 0;
        var a = 3;
        var u = 0.8;
        var timer = setInterval(function () {
            a = (target - dom.offsetLeft) / 5;
            speed += a;
            speed *= u;
            if (Math.abs(speed) < 1 && Math.abs(target - dom.offsetLeft) < 1) {
                clearInterval(timer);
                dom.style.left = target + 'px';
            } else {
                dom.style.left = dom.offsetLeft + speed + 'px';
                console.log(speed, target - dom.offsetLeft);            
            }
        },30)
    }

    问题1:实现加速度减小的加速运动和加速度增大的减速运动

    解决:由单摆运动的原理可知,随着小方块的左边线与指定位置的距离减小,加速度减小,由此可建立二者的关系,控制增大或者减小加速度(该思路与缓冲运动利用距离减小控制速度变化相同)

    问题2:小方块要停留在指定位置

    解决:首先需要增加一个摩擦系数u来消耗动能;其次分析小方块速度可为0的点,除了最终的指定位置速度为0,还有运动到两边加速度最大,速度为0的临界点,因此定时器清除的条件有两个,一是速度为0,二是小方块的左边线到达指定位置。

    问题3:实际过程中,速度基本不可能正好为0,左边线也不能正好到达指定位置,因此虽然小方块看起来停住了,但是定时器并没有清除

    解决:将判定条件改为速度与距离的绝对值均小于1,同时满足二者时,清理定时器。为了防止小方块并为到达指定位置,将其左边线设置为到指定位置


    案例

    代码功能:第一个方块上叠加着一个透明度为0.2的方块,移动鼠标到其他方块,则透明方块会做弹性移动到该方块,代码如下:

    html代码

    <ul>
        <li class="ele">黑执事</li>
        <li class="ele">火影忍者</li>
        <li class="ele">海贼王</li>
        <li class="ele">死神</li>
        <li class="bg"></li>
    </ul>

    css代码

    ul {
        width: 800px;
        height: 100px;
        padding: 0;
        position: relative;
        top: 100px;
        left: 100px;
        list-style: none;
        border: 1px solid black;
    }
    ul .ele {
        float: left;
        width: 198px;
        height: 98px;
        background-color: steelblue;
        border: 1px solid black;
        line-height: 98px;
        text-align: center;
    }
    ul .bg {
        width: 200px;
        height: 100px;
        background-color: black;
        opacity: 0.2;
        position: absolute;
        top: 0;
        left: 0;
    }

    js代码

    var liList = document.getElementsByTagName('li');
    var liBg = liList[liList.length - 1];
    var timer = null;
    for (var i = 0; i < liList.length - 1; i++) {
        liList[i].onmouseenter = function () {
            startMove(liBg, this.offsetLeft);
        }    
    }
    
    function startMove(dom, target) {
        clearInterval(timer);
        var speed = 0;
        var a = 3;
        var u = 0.8;
        timer = setInterval(function () {
            a = (target - dom.offsetLeft) / 5;
            speed += a;
            speed *= u;
            if (Math.abs(speed) < 1 && Math.abs(target - dom.offsetLeft) < 1) {
                clearInterval(timer);
                dom.style.left = target + 'px';
                console.log(1);
                
            } else {
                dom.style.left = dom.offsetLeft + speed + 'px';
                console.log(speed, target - dom.offsetLeft);            
            }
        },30)
    }

     

     

     

     

     

     

    展开全文
  • 阐述了越流系统水流运动规律研究的必要性,介绍了该领域的国内外研究现状,对越流系统研究方法及模型的建立、低渗非达西流的存在性、低渗非达西流的判据以及有关低渗非达西流的模型与运动方程等问题进行了评述,指出...
  • 不同类型煤层采场覆岩破坏形式与运动规律不同,根据已有成果分析可将煤层采场分为一般采场、缓沉采场、整体垮落采场三种典型采场,每种类型采场对应一种类型覆岩破坏形式,确定一个采场顶板的破坏形式能够为采取相应的...
  • 为研究似膏体充填开采覆岩运动规律,采用自行研发的矿压传感器对曹庄煤矿81006似膏体充填工作面进行矿压观测,得到了81006工作面超前支承压力分布规律、充填体内垂直应力及已充填区域内顶底板移近量。结果表明:超前支...
  • 为更好的研究在浅埋地下爆炸作用下岩土体中出现的波动过程,将爆炸力学、弹性力学和高等数学的基本理论知识进行有效结合,建立了浅埋爆炸作用下,地震波在半无限介质自由表面运动的计算模型,并用Matlab编程计算爆炸地震...
  • 第6章 运动规律在Flash动画中的应用 兔子弹瑟琶 6.1 恐龙喷火 6.2 英雄救美 6.3 传统动画的运动规律在Flash动画中的应用是非常广泛的 本章将以Flash MV桃花朵朵开中的三个经典片段为例来详细介绍如何应用运动规律和...
  • 动画中的弹性运动 从视觉效果上接近 物理经典力学中的单摆运动或弹簧(胡克定律F=Kx)振动 先看下面的模拟演示: 规律: 小球先从出发点(初始为最左侧)向目标点(中心点)加速狂奔,奔的过程中速度越来越大,但加速度...

    动画中的弹性运动 从视觉效果上接近 物理经典力学中的单摆运动或弹簧(胡克定律F=Kx)振动

    先看下面的模拟演示:

    规律:
    小球先从出发点(初始为最左侧)向目标点(中心点)加速狂奔,奔的过程中速度越来越大,但加速度越来越小,等经过目标点时,发现速度太大刹不住车(此时速度达到最大值,但加速度减为0),奔过头了!于是加速度发生逆转,从0开始变为负值,从而导致速度越来越小,等速度减到0时,也奔到了最右侧(此时负加速度也达到最大值),然后在负加速度的影响下,开始掉头又狂奔....这样不断下去,直接摩擦力让它筋疲力尽,最终瘫倒在目标点 :)

    公式:胡克定律F=Kx,而合外力F根据牛二定律 F=ma,这二者结合起来换算一下,也就是 ma = kx,即a = (k/m)x .用代码体现出来,即加速度与位移成(正比)线性关系。


    package {


    import flash.display.Sprite;

    import flash.events.Event;

    import flash.events.MouseEvent;

    import flash.geom.Rectangle;

     
    import flash.ui.Mouse;

    import flash.ui.MouseCursor;

     
    public class Spring1 extends Sprite {

     
    private var ball:Ball;

     
    private var spring:Number=0.02;


    private var targetX:Number=stage.stageWidth/2;

     
    private var rect:Rectangle;

     
    private var vx:Number=0;

     
    private var isDragging=false;

     
    public function Spring1() {


    init();

     
    }

     
    private function init():void {


    ball=new Ball(10);

     
    addChild(ball);

     
    ball.x=20;

     
    ball.y=stage.stageHeight/2;

     
    addEventListener(Event.ENTER_FRAME, onEnterFrame);


    ball.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler);

     
    ball.addEventListener(MouseEvent.MOUSE_OVER,function(){Mouse.cursor = MouseCursor.HAND});

     
    ball.addEventListener(MouseEvent.MOUSE_OUT,MouseOutHandler);

     
    stage.addEventListener(MouseEvent.MOUSE_UP,MouseUpHandler);

     
    //画辅助线

     
    graphics.lineStyle(1);

     
    graphics.moveTo(ball.x,ball.y);

     
    graphics.lineTo(stage.stageWidth-ball.x,ball.y);

     
    graphics.moveTo(stage.stageWidth/2,ball.y-10);

     
    graphics.lineTo(stage.stageWidth/2,ball.y+10);


    rect=new Rectangle(ball.x,ball.y,stage.stageWidth-2*ball.x,0);


    }

     
    private function MouseOutHandler() {


    if (! isDragging) {


    Mouse.cursor=MouseCursor.AUTO;

     
    }


    }

     
    //开始拖动

     
    private function MouseDownHandler(e:MouseEvent):void {


    ball.startDrag(true,rect);

     
    Mouse.cursor=MouseCursor.HAND;

    removeEventListener(Event.ENTER_FRAME, onEnterFrame);

    isDragging=true;


    }

     
    //结束拖动

     
    private function MouseUpHandler(e:MouseEvent):void {

     
    ball.stopDrag();


    addEventListener(Event.ENTER_FRAME, onEnterFrame);

     
    Mouse.cursor=MouseCursor.AUTO;

     
    isDragging=false;

     
    }

     
    private function onEnterFrame(event:Event):void {

     
    var dx:Number = targetX-ball.x;


    var ax:Number = dx*spring;//加速度与位移成正(反)比关系

     
    vx += ax;

     
    vx *= 0.97;//摩擦系数

     
    trace(ax,vx);

     
    ball.x+=vx;

     
    }

     
    }

     
    }

    上面演示是一维的弹性运动,当然也可以同时在x轴和y轴上进行

    代码:

     
    package {


    import flash.display.Sprite;

     
    import flash.events.Event;

     
    import flash.events.MouseEvent;

     
    import flash.ui.Mouse;

     
    import flash.ui.MouseCursor;

     
    public class Spring2 extends Sprite {

     
    private var ball:Ball;

     
    private var spring:Number=0.1;

     
    private var targetX:Number=stage.stageWidth/2;

     
    private var targetY:Number=stage.stageHeight/2;

     
    private var vx:Number=0;

     
    private var vy:Number=0;

     
    private var friction:Number=0.95;

     
    public function Spring2() {

     
    init();

     
    }

     
    private function init():void {

     
    ball = new Ball(5);

     
    ball.x = Math.random() * stage.stageWidth;

     
    ball.y = Math.random() * stage.stageHeight;         

     
    addChild(ball);

     
    addEventListener(Event.ENTER_FRAME, EnterFrameHandler);

     
    stage.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler); 

     
    MouseDownHandler(null);

     
    Mouse.cursor = MouseCursor.BUTTON;

     
    }

     
    function MouseDownHandler(e:MouseEvent):void{

     
    graphics.clear();

     
    ball.x = Math.random() * stage.stageWidth;

     
    ball.y = Math.random() * stage.stageHeight;

     
    ball.vx = (Math.random()*2-1) * 50;


    ball.vy = (Math.random()*2-1) * 50;


    graphics.moveTo(ball.x,ball.y);         

     
    }

     
    private function EnterFrameHandler(event:Event):void {

     
    //去掉下面的注释,就变成鼠标跟随的弹性运动

     
    //targetX = mouseX;

     
    //targetY = mouseY;

     
    var dx:Number=targetX-ball.x;

     
    var dy:Number=targetY-ball.y;

     
    var ax:Number=dx*spring;

     
    var ay:Number=dy*spring;


    vx+=ax;

     
    vy+=ay;


    vx*=friction;

     
    vy*=friction;


    ball.x+=vx;

    ball.y+=vy;


    graphics.lineStyle(0.3,0xbbbbbb,1);

     
    graphics.lineTo(ball.x,ball.y);

     
    }

     
    }

     
    }

    接下来:用代码模仿一根猴皮筋儿


    package {


    import flash.display.Sprite;

     
    import flash.events.Event;

     
    import flash.ui.Mouse;

     
    import flash.ui.MouseCursor;

     
    public class Spring3 extends Sprite {


    private var ball:Ball;

     
    private var spring:Number=0.1;

     
    private var vx:Number=0;

     
    private var vy:Number=0;


    private var friction:Number=0.95;

     
    public function Spring3() {

     
    init();


    }

     
    private function init():void {

     
    ball = new Ball(10);

     
    addChild(ball);

     
    addEventListener(Event.ENTER_FRAME, onEnterFrame);


    Mouse.cursor = MouseCursor.HAND;

     
    }

     
    private function onEnterFrame(event:Event):void {

     
    var dx:Number = mouseX-ball.x;

     
    var dy:Number = mouseY-ball.y;

     
    var ax:Number = dx*spring;

     
    var ay:Number = dy*spring;

     
    vx+=ax;

     
    vy+=ay;

     
    vx*=friction;


    vy*=friction;

     
    ball.x+=vx;

     
    ball.y+=vy;


    graphics.clear();

     
    graphics.lineStyle(1);          

     
    graphics.moveTo(mouseX, mouseY);

     
    graphics.lineTo(ball.x, ball.y);

     
    }

     
    }

     
    }

    上面的例子只有一个球,如果考虑更多的小球,第一球以鼠标所在位置为目标做弹性运动,而第二个以第一个球为目标做弹性运动,第三球又跟着第二个... 这会是什么效果呢?

     
    package {

     
    import flash.display.Sprite;

     
    import flash.events.MouseEvent;

    import flash.events.Event;

     
    public class ArrayChain extends Sprite {

     
    var arrBall:Array;      

     
    var spring:Number=0.12;

     
    var firstBall:Ball;

     
    var gravity:Number=6;

     
    var friction:Number=0.8;

     
    public function ArrayChain() {          


    init();

     
    }

     
    private function init():void {

     
    arrBall=new Array(5);

     
    for (var i:uint=0,j:uint=arrBall.length; i<j; i++) {

     
    arrBall[i]=new Ball(10,Math.random()*0xffffff);


    addChild(arrBall[i]);


    }

     
    firstBall=arrBall[0];

     
    firstBall.x=Math.random()*stage.stageWidth;

     
    firstBall.y=Math.random()*stage.stageHeight;    

     
    addEventListener(Event.ENTER_FRAME,EnterFrameHandler);

     
    }

     
    private function EnterFrameHandler(e:Event):void {

     
    //第一个球以鼠标所在位置为目标做弹性运动

     
    firstBall.vx += (mouseX - firstBall.x) * spring;


    firstBall.vy += (mouseY - firstBall.y) * spring;

     
    firstBall.vy+=gravity;

     
    firstBall.vx*=friction;

     
    firstBall.vy*=friction;


    firstBall.x+=firstBall.vx;

     
    firstBall.y+=firstBall.vy;

     
    //准备画连线


    graphics.clear();

     
    graphics.lineStyle(0.2,0x666666);

     
    graphics.moveTo(mouseX,mouseY);

     
    graphics.lineTo(firstBall.x,firstBall.y);

     
    //后面的小球依次以前一个的位置为目标做弹性运动

     
    for (var i=1,j=arrBall.length; i<j; i++) {


    var ball:Ball=arrBall[i];

     
    ball.vx += (arrBall[i-1].x-ball.x)*spring;


    ball.vy += (arrBall[i-1].y-ball.y)*spring;

     
    ball.vy+=gravity;

     
    ball.vx*=friction;


    ball.vy*=friction;

     
    ball.x+=ball.vx;

     
    ball.y+=ball.vy;

     
    graphics.lineTo(ball.x,ball.y);//画出连线将各球连在一起


    }

     
    }


    }

     
    }

    ok,我们得到了一个"弹簧链",当然这里面还考虑了重力的因素,通过上面的几个例子可以总结一下:第一个示例中一维弹性运动可以看作为x方向的加速度随位移的影响,而第二个示例可以看作是x,y二个方向加速度随位移影响的叠加,而第三个示例,则可以看作是任何方向这种影响再叠加重力的综合效果。总之:任何方向的弹性运动,都可以认为是该方向的加速度(或力)随位移的影响,而且这种影响可以在多个方向上叠加。下面这个是多点控制弹性运动的示例:

    展开全文
  • 动画中的弹性运动 从视觉效果上接近 物理经典力学中的单摆运动或弹簧(胡克定律F=Kx)振动 先看下面的模拟演示: 规律: 小球先从出发点(初始为最左侧)向目标点(中心点)加速狂奔,奔的过程中速度越来越大,但加速度...

    动画中的弹性运动 从视觉效果上接近 物理经典力学中的单摆运动或弹簧(胡克定律F=Kx)振动

    先看下面的模拟演示:

    规律:
    小球先从出发点(初始为最左侧)向目标点(中心点)加速狂奔,奔的过程中速度越来越大,但加速度越来越小,等经过目标点时,发现速度太大刹不住车(此时速度达到最大值,但加速度减为0),奔过头了!于是加速度发生逆转,从0开始变为负值,从而导致速度越来越小,等速度减到0时,也奔到了最右侧(此时负加速度也达到最大值),然后在负加速度的影响下,开始掉头又狂奔....这样不断下去,直接摩擦力让它筋疲力尽,最终瘫倒在目标点 :)

    公式:胡克定律F=Kx,而合外力F根据牛二定律 F=ma,这二者结合起来换算一下,也就是 ma = kx,即a = (k/m)x .用代码体现出来,即加速度与位移成(正比)线性关系。

    show sourceview source

    print?

    01
    package {

    02
    import flash.display.Sprite;

    03
    import flash.events.Event;

    04
    import flash.events.MouseEvent;

    05
    import flash.geom.Rectangle;

    06
    import flash.ui.Mouse;

    07
    import flash.ui.MouseCursor;

    08

    09
    public class Spring1 extends Sprite {

    10
    private var ball:Ball;

    11
    private var spring:Number=0.02;

    12
    private var targetX:Number=stage.stageWidth/2;

    13
    private var rect:Rectangle;

    14
    private var vx:Number=0;

    15
    private var isDragging=false;

    16

    17
    public function Spring1() {

    18
    init();

    19
    }

    20

    21
    private function init():void {

    22
    ball=new Ball(10);

    23
    addChild(ball);

    24
    ball.x=20;

    25
    ball.y=stage.stageHeight/2;

    26
    addEventListener(Event.ENTER_FRAME, onEnterFrame);

    27

    28
    ball.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler);

    29
    ball.addEventListener(MouseEvent.MOUSE_OVER,function(){Mouse.cursor = MouseCursor.HAND});

    30
    ball.addEventListener(MouseEvent.MOUSE_OUT,MouseOutHandler);

    31
    stage.addEventListener(MouseEvent.MOUSE_UP,MouseUpHandler);

    32

    33
    //画辅助线

    34
    graphics.lineStyle(1);

    35
    graphics.moveTo(ball.x,ball.y);

    36
    graphics.lineTo(stage.stageWidth-ball.x,ball.y);

    37
    graphics.moveTo(stage.stageWidth/2,ball.y-10);

    38
    graphics.lineTo(stage.stageWidth/2,ball.y+10);

    39

    40
    rect=new Rectangle(ball.x,ball.y,stage.stageWidth-2*ball.x,0);

    41
    }

    42

    43
    private function MouseOutHandler() {

    44
    if (! isDragging) {

    45
    Mouse.cursor=MouseCursor.AUTO;

    46
    }

    47
    }

    48

    49

    50
    //开始拖动

    51
    private function MouseDownHandler(e:MouseEvent):void {

    52
    ball.startDrag(true,rect);

    53
    Mouse.cursor=MouseCursor.HAND;

    54
    removeEventListener(Event.ENTER_FRAME, onEnterFrame);

    55
    isDragging=true;

    56

    57
    }

    58

    59
    //结束拖动

    60
    private function MouseUpHandler(e:MouseEvent):void {

    61
    ball.stopDrag();

    62
    addEventListener(Event.ENTER_FRAME, onEnterFrame);

    63
    Mouse.cursor=MouseCursor.AUTO;

    64
    isDragging=false;

    65
    }

    66

    67
    private function onEnterFrame(event:Event):void {

    68
    var dx:Number = targetX-ball.x;

    69
    var ax:Number = dx*spring;//加速度与位移成正(反)比关系

    70
    vx += ax;

    71
    vx *= 0.97;//摩擦系数

    72
    trace(ax,vx);

    73
    ball.x+=vx;

    74

    75
    }

    76
    }

    77
    }

    上面演示是一维的弹性运动,当然也可以同时在x轴和y轴上进行

    代码:

    show sourceview source

    print?

    01
    package {

    02
    import flash.display.Sprite;

    03
    import flash.events.Event;

    04
    import flash.events.MouseEvent;

    05
    import flash.ui.Mouse;

    06
    import flash.ui.MouseCursor;

    07

    08
    public class Spring2 extends Sprite {

    09
    private var ball:Ball;

    10
    private var spring:Number=0.1;

    11
    private var targetX:Number=stage.stageWidth/2;

    12

    13
    private var targetY:Number=stage.stageHeight/2;

    14
    private var vx:Number=0;

    15
    private var vy:Number=0;

    16
    private var friction:Number=0.95;

    17

    18
    public function Spring2() {

    19
    init();

    20
    }

    21
    private function init():void {

    22
    ball = new Ball(5);

    23
    ball.x = Math.random() * stage.stageWidth;

    24
    ball.y = Math.random() * stage.stageHeight;         

    25
    addChild(ball);

    26
    addEventListener(Event.ENTER_FRAME, EnterFrameHandler);

    27
    stage.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler); 

    28
    MouseDownHandler(null);

    29
    Mouse.cursor = MouseCursor.BUTTON;

    30
    }

    31

    32
    function MouseDownHandler(e:MouseEvent):void{

    33
    graphics.clear();

    34
    ball.x = Math.random() * stage.stageWidth;

    35
    ball.y = Math.random() * stage.stageHeight;

    36
    ball.vx = (Math.random()*2-1) * 50;

    37
    ball.vy = (Math.random()*2-1) * 50;

    38
    graphics.moveTo(ball.x,ball.y);         

    39
    }

    40

    41
    private function EnterFrameHandler(event:Event):void {

    42
    //去掉下面的注释,就变成鼠标跟随的弹性运动

    43
    //targetX = mouseX;

    44
    //targetY = mouseY;

    45
    var dx:Number=targetX-ball.x;

    46
    var dy:Number=targetY-ball.y;

    47
    var ax:Number=dx*spring;

    48
    var ay:Number=dy*spring;

    49
    vx+=ax;

    50
    vy+=ay;

    51
    vx*=friction;

    52
    vy*=friction;

    53
    ball.x+=vx;

    54
    ball.y+=vy;

    55
    graphics.lineStyle(0.3,0xbbbbbb,1);

    56
    graphics.lineTo(ball.x,ball.y);

    57
    }

    58
    }

    59
    }

    接下来:用代码模仿一根猴皮筋儿

    show sourceview source

    print?

    01
    package {

    02
    import flash.display.Sprite;

    03
    import flash.events.Event;

    04
    import flash.ui.Mouse;

    05
    import flash.ui.MouseCursor;

    06

    07
    public class Spring3 extends Sprite {

    08
    private var ball:Ball;

    09
    private var spring:Number=0.1;

    10
    private var vx:Number=0;

    11
    private var vy:Number=0;

    12
    private var friction:Number=0.95;

    13

    14

    15
    public function Spring3() {

    16
    init();

    17
    }

    18
    private function init():void {

    19
    ball = new Ball(10);

    20
    addChild(ball);

    21
    addEventListener(Event.ENTER_FRAME, onEnterFrame);

    22
    Mouse.cursor = MouseCursor.HAND;

    23
    }

    24
    private function onEnterFrame(event:Event):void {

    25
    var dx:Number = mouseX-ball.x;

    26
    var dy:Number = mouseY-ball.y;

    27
    var ax:Number = dx*spring;

    28
    var ay:Number = dy*spring;

    29
    vx+=ax;

    30
    vy+=ay;

    31

    32
    vx*=friction;

    33
    vy*=friction;

    34
    ball.x+=vx;

    35
    ball.y+=vy;

    36
    graphics.clear();

    37
    graphics.lineStyle(1);          

    38
    graphics.moveTo(mouseX, mouseY);

    39
    graphics.lineTo(ball.x, ball.y);

    40
    }

    41
    }

    42
    }

    上面的例子只有一个球,如果考虑更多的小球,第一球以鼠标所在位置为目标做弹性运动,而第二个以第一个球为目标做弹性运动,第三球又跟着第二个... 这会是什么效果呢?

    show sourceview source

    print?

    01
    package {

    02

    03
    import flash.display.Sprite;

    04
    import flash.events.MouseEvent;

    05
    import flash.events.Event;

    06

    07
    public class ArrayChain extends Sprite {

    08

    09
    var arrBall:Array;      

    10
    var spring:Number=0.12;

    11
    var firstBall:Ball;

    12
    var gravity:Number=6;

    13
    var friction:Number=0.8;

    14

    15
    public function ArrayChain() {          

    16
    init();

    17
    }

    18

    19
    private function init():void {

    20
    arrBall=new Array(5);

    21
    for (var i:uint=0,j:uint=arrBall.length; i<j; i++) {

    22
    arrBall[i]=new Ball(10,Math.random()*0xffffff);

    23
    addChild(arrBall[i]);

    24
    }

    25
    firstBall=arrBall[0];

    26
    firstBall.x=Math.random()*stage.stageWidth;

    27
    firstBall.y=Math.random()*stage.stageHeight;    

    28
    addEventListener(Event.ENTER_FRAME,EnterFrameHandler);

    29
    }

    30

    31
    private function EnterFrameHandler(e:Event):void {

    32
    //第一个球以鼠标所在位置为目标做弹性运动

    33
    firstBall.vx += (mouseX - firstBall.x) * spring;

    34
    firstBall.vy += (mouseY - firstBall.y) * spring;

    35
    firstBall.vy+=gravity;

    36
    firstBall.vx*=friction;

    37
    firstBall.vy*=friction;

    38
    firstBall.x+=firstBall.vx;

    39
    firstBall.y+=firstBall.vy;

    40

    41
    //准备画连线

    42
    graphics.clear();

    43
    graphics.lineStyle(0.2,0x666666);

    44
    graphics.moveTo(mouseX,mouseY);

    45
    graphics.lineTo(firstBall.x,firstBall.y);

    46

    47
    //后面的小球依次以前一个的位置为目标做弹性运动

    48
    for (var i=1,j=arrBall.length; i<j; i++) {

    49
    var ball:Ball=arrBall[i];

    50
    ball.vx += (arrBall[i-1].x-ball.x)*spring;

    51
    ball.vy += (arrBall[i-1].y-ball.y)*spring;

    52
    ball.vy+=gravity;

    53
    ball.vx*=friction;

    54
    ball.vy*=friction;

    55
    ball.x+=ball.vx;

    56
    ball.y+=ball.vy;

    57
    graphics.lineTo(ball.x,ball.y);//画出连线将各球连在一起

    58
    }

    59
    }

    60
    }

    61

    62
    }

    ok,我们得到了一个"弹簧链",当然这里面还考虑了重力的因素,通过上面的几个例子可以总结一下:第一个示例中一维弹性运动可以看作为x方向的加速度随位移的影响,而第二个示例可以看作是x,y二个方向加速度随位移影响的叠加,而第三个示例,则可以看作是任何方向这种影响再叠加重力的综合效果。总之:任何方向的弹性运动,都可以认为是该方向的加速度(或力)随位移的影响,而且这种影响可以在多个方向上叠加。下面这个是多点控制弹性运动的示例:

    转载于:https://www.cnblogs.com/happysky97/archive/2010/11/22/1884574.html

    展开全文
  • 基于微震监测技术结合关键层理论对深埋"两硬"综放面覆岩运动规律进行了研究,并以此预测了星村煤矿3302工作面发生矿震可能诱发冲击地压的步距。结果表明:顶板平均断裂高度为82.5 m;第3坚硬岩层断裂后形成"砌体梁"是...
  • 动画中运用“压扁”和“拉长”的手法,夸大这种形体改变的程度,以加强动作上的张力和弹性,从而表达受力对象的质感、重量以及角色情绪上的变化,例如:惊讶、喜悦、悲伤等。3D动画软件中,其中的“变形”功能...
  • 假设拉索和水线之间相互作用力为库仑阻尼力和线性阻尼力,推导了三维连续弹性拉索和三维连续水线的运动偏微分方程,采用数值方法进行求解,得到三维连续拉索和三维连续水线的风雨激振响应规律.结果表明:当三维连续...
  • 研究旋转梁结构的弹性耦合振动问题。通过引入对偶体系,建立了解决该类问题的辛方法。在辛体系中描述旋转梁纵向和横向耦合振动控制方程,即哈密顿正则方程。进一步求解得到结构的固有振动频率及相应的振动模态,发现...
  • 首先建立了俯仰运动矩形贮箱刚-液-弹耦合系统在外力矩作用下的耦合动力学模型,给出满足边界条件的速度势函数和液面波高的级数表达式,采用伽辽金法离散,将动力学模型转化为常微分方程组,得到刚-液-弹耦合系统的...
  • as3种常见的弹性效果公式以及波形运动等as3动画效果公式代码整理,对于常用的来说作者整理的很全面,包括AS3的进制转换颜色提取等效果: AS3缓动公式:sprite.x += (targetX – sprite.x) * easing;//easing为...
  • 分子的热运动(thermal motion),就是物体都由分子、原子和离子组成(水由分子组成,铁由原子组成,盐由离子组成),而一切物质的分子都在不停地运动,且是无规则的运动。分子的热运动跟物体的温度有关 (0℃的情况下也...
  • 通过对带传动的运动及受力分析,推导出带传动中带中拉力及带与带轮之间摩擦力和正压力的变化规律,推导出弹性滑动角α′及弹性滑动率ε的计算公式。
  • 基于线性热弹性理论,将修正的非傅立叶导热方程与热弹性运动方程联立,构建了急速热冲击作用下计及运动加速效应和非傅立叶效应的热弹性动力学模型.采用Laplace变换和有限汉克尔变换,推导了各向同性球形结构热弹性...
  • 为了得到弹性管束换热器传热元件的振动参数以及流体诱导振动强化传热规律,对平面弹性管束的固有振动特性及脉动流作用下的弹性管束振动规律进行了研究。首先,利用ANSYS软件建立平面弹性管束有限元模型,并对管束进行...
  • 应用拉格朗日方程方法研究理想对称八弹性振子作二维运动的变化规律,得到其微小振动的控制方程,用数值解法求解振动方程,得到了振子运动的时程响应图样。结果表明:理想对称八弹性振子的振动为非线性振动。波形可...
  • 探讨了不同激光脉冲能量对板料运动速度和成形精度的影响,以及相同能量下板料不同区域的运动速度规律。数值模拟表明,当激光脉冲能量较小时,板料不能与凹模碰撞,中心区域节点上下往复振动,振幅逐渐减小,最后处于静止...
  • 基于三维圆型编织携纱器的运动规律,研究了空间纱线交织结构,获得了预成型件结构的单胞模型,推导了内部单胞和表面单胞的几何特性、编织工艺参数间的数学关系.采用刚度平均化方法,计算了三维圆型编织复合材料的弹性...
  • 应用拉格朗日方程方法研究了理想对称十二弹性振子做二维运动的变化规律,得到其微小振动的控制方程。用数值解法求解振动方程,得到了振子运动的时程响应图样。结果表明:理想对称十二弹性振子的振动为非简谐的周期性...
  • 针对给定的运动规律,对不可压流场采用侵入式边界方法求解了非定常气动载荷,其中未计及弹性结构变形对流场的影响.对非定常气动载荷作用下的薄壁弹性结构进行了瞬态动力学数值模拟.以地面试验状态的整流罩分离为例...
  • 用柔性机械臂连杆末端的弹性变形以及变形角度来表示空间机器人柔性臂的弹性运动变量,克服了用 无穷维振动模态变量来表示弹性变形给系统运动学建模带来的困难;基于广义雅可比矩阵的思想,建立了柔性臂空间机器人“双...
  • 应用拉格朗日方程方法研究了理想对称六弹性振子做二维运动的变化规律,得到其微小振动的控制方程,用数值解法求解了振动方程,得到了振子运动的时程响应图样 。结果表明 :理想对称六弹性振子的振动为非简谐的周期性振动...
  • 基于规范空间理论研究各向异性固体运动方程与含水介质质量守恒方程的准静态耦合问题,讨论几种不同各向异性性质的孔隙介质的弹性波传播规律,分析波场速度在结构损伤区域的变化规律,最后采用偏移技术对结构损伤进行...
  • 提出一种新型弹性单腿跳跃机器人系统,该机器人由两个驱动臂和一个弹性被动伸缩腿组成,系统只能依靠内部动力学耦合实现动态站立平衡、起跳、稳定连续跳跃运动。给出系统机构模型,分析该系统的变约束特征。该机器人...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,020
精华内容 1,208
关键字:

弹性运动规律