kingBook

导航

旋转力学例子

package {
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.utils.getTimer;

    public class RotationExample extends Sprite {

        private var rotatingObject: Shape; // 要旋转的对象
        private var rotateSpeed: Number = 0;
        private var time: Number = getTimer();

        public function RotationExample() {
            createRotatingObject();
            addEventListener(Event.ENTER_FRAME, update);
        }

        // 创建旋转对象
        private function createRotatingObject(): void {
            rotatingObject = new Shape();

            // 绘制一个矩形(注册点在中心)
            rotatingObject.graphics.beginFill(0xFF0000);
            rotatingObject.graphics.drawRect(-50, -30, 100, 60); // 中心在 (0,0)
            rotatingObject.graphics.endFill();

            // 设置初始位置
            rotatingObject.x = stage.stageWidth / 2;
            rotatingObject.y = stage.stageHeight / 2;

            addChild(rotatingObject);
        }

        // 更新旋转
        private function update(event: Event): void {
            // t=FL
            // 其中 t 是力矩,F 是作用力,L 是力臂(即力的作用点到旋转轴的垂直距离)
            const F: Number = 10;
            const L: Number = 1;
            const t: Number = F * L;

            // t=mr^2a
            // 其中 t 是力矩,m 是质量, r 是质心到旋转轴的距离,a 是角加速度

            // t=Ia
            // 其中 t 是力矩,旋转惯量 I=mr^2, a 是角加速度
            const m: Number = 10;
            const r: Number = 1000;
            const I: Number = m * r * r;


            var dt = getTimer() - time;
            time = getTimer();

            var a: Number = t / I * (dt * dt);
            a *= 180 / Math.PI;

            rotateSpeed += a;
            trace("a:" + a);
            rotatingObject.rotation += rotateSpeed;
        }
    }
}

posted on 2025-03-15 05:18  kingBook  阅读(6)  评论(0)    收藏  举报