reflections倒影类

var refl :Reflection = new Reflection(mc, 150, 0.5, 10);//显示对象,渐变参数(0~255),透明参数(0~1),倒影y相对偏移量
stage.addChild( refl );

stage.addEventListener(MouseEvent.CLICK,eventHandler);
function eventHandler(evt:MouseEvent):void {
    //删除倒影
    stage.removeChild( refl );
    refl.kill();
}



Reflection class: 

程序代码

package {
    import flash.display.*;
    import flash.geom.*;
    import flash.events.*;

    public class Reflection extends Sprite {
        //publics:
        public var reflectedClip      :DisplayObjectContainer;
        public var reflectionHeight   :Number;
        public var reflectionStrength :Number;
        public var reflectionOffsetY  :Number;

        //privates:
        private var reflectionHolder  :Sprite;
        private var bm_reflection     :Bitmap;
        private var refMask           :Sprite;

        //////////////////////////////////////////////
        //               CONSTRUCTOR:
        //////////////////////////////////////////////
        public function Reflection( reflectedClip:DisplayObjectContainer, height:Number = 255, strength:Number = 1, reflectionOffsetY:Number = 1 ) {
            this.reflectedClip       = reflectedClip;
            this.reflectionHeight    = height;
            this.reflectionStrength  = strength;
            this.reflectionOffsetY   = reflectionOffsetY;
            this.addEventListener(Event.ENTER_FRAME, render);
            build();
        }
        
        //////////////////////////////////////////////
        //               RENDER FUNCTIONS:
        //////////////////////////////////////////////
        private function render(l_loader:Event) : void
        {
            bm_reflection.bitmapData.fillRect(bm_reflection.getRect(bm_reflection), 16777215);
            bm_reflection.bitmapData.draw(reflectedClip);
            return;
        }// end function
        
        //////////////////////////////////////////////
        //               BUILDER FUNCTIONS:
        //////////////////////////////////////////////
        private function build():void {
            buildReflection();
            attachItems();
            positionElements();
        }

        private function buildReflection():void {
            reflectionHolder = new Sprite();

            var bmd:BitmapData = new BitmapData( reflectedClip.width, reflectedClip.height, true, 0xc61916 );
            bmd.draw( reflectedClip );

            bm_reflection             = new Bitmap( bmd );
            bm_reflection.y           = bm_reflection.height;
            bm_reflection.x           = 0;
            bm_reflection.rotation    = 180;
            bm_reflection.scaleX      = -1;
            bm_reflection.alpha       = reflectionStrength;

            refMask                   = new Sprite();
            var fillType      :String = GradientType.LINEAR;
            var colors        :Array  = [0xFFFFFF, 0x0000FF];
            var alphas        :Array  = [100, 0];
            var ratios        :Array  = [0, reflectionHeight];
            var matr          :Matrix = new Matrix();
            var spreadMethod  :String = SpreadMethod.PAD;

            matr.createGradientBox(reflectedClip.height * .9, reflectedClip.width, 0,0, 0);
            refMask.graphics.beginGradientFill(fillType, colors, alphas, ratios, matr, spreadMethod);
            refMask.graphics.drawRect(0, 0, reflectedClip.height, reflectedClip.width);

            refMask.y                        = 0;
            refMask.x                        = bm_reflection.width;
            refMask.rotation                 = 90;

            bm_reflection.cacheAsBitmap      = true;
            refMask.cacheAsBitmap            = true;
            bm_reflection.mask               = refMask;
        }

        //////////////////////////////////////////////
        //        ATTACHER & POSITION FUNCTIONS:
        //////////////////////////////////////////////
        private function attachItems():void {
            this.addChild( reflectionHolder );
            reflectionHolder.addChild( bm_reflection );
            reflectionHolder.addChild( refMask );
        }

        private function positionElements():void {
            this.x = reflectedClip.x;
            this.y = reflectedClip.y + reflectedClip.height + reflectionOffsetY;
        }

        //////////////////////////////////////////////
        //               KILL FUNCTION:
        //////////////////////////////////////////////
        public function kill():void {
            reflectionHolder.removeChild( refMask );
            reflectionHolder.removeChild( bm_reflection );
            this.removeChild( reflectionHolder );
            this.removeEventListener(Event.ENTER_FRAME, render);
        }
    }
}


转载于:https://www.cnblogs.com/lisadream/archive/2010/03/04/1678020.html

【USV实时NMPC】无人水面艇实时非线性模型预测控制:轨迹跟踪与避障研究(Matlab代码实现)内容概要:本文围绕无人水面艇(USV)的实时非线性模型预测控制(NMPC)展开研究,重点探讨其在复杂环境下的轨迹跟踪与避障能力。通过Matlab代码实现,构建了适用于USV的动力学模型,并设计了非线性模型预测控制器,以实现对期望轨迹的高精度跟踪,同时在存在静态或动态障碍物的情况下完成自主避障。文中详细阐述了NMPC的优化求解过程,包括目标函数构建、约束条件设定及实时性保障策略,展示了该方法相较于传统控制算法在处理非线性、多约束和前瞻优化方面的优势。此外,结合仿真结果验证了所提方法的有效性和鲁棒性。; 适合人群:具备自动控制、机器人学或海洋工程背景的研究生、科研人员及从事无人系统开发的工程师;熟悉Matlab/Simulink仿真环境并有一定优化控制基础的技术人员。; 使用场景及目标:①应用于无人艇、无人船等水上自动驾驶系统的轨迹跟踪与自主导航开发;②用于研究非线性模型预测控制在实际动态系统中的实时实现方法;③为避障算法与运动规划的结合提供技术参考与代码实现范例。; 阅读建议:建议读者结合提供的Matlab代码进行仿真实验,深入理解NMPC中代价函数设计、约束处理与求解器调用的关键环节,同时可尝试修改环境参数或引入更多不确定性因素以测试系统的适应能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值