【转】p2物理引擎在egret中的应用

一、p2物理引擎在egret中的应用:简单贴图的实现 告诉你p2物理引擎在egret中是如何运用的,成功实现一次贴图。 阅读详情

原文地址

- 效果:

点击在线查看 ,中间一个静态地面,一个长方形物体会掉在上面中间位置

这里写图片描述

前言:

使用egret游戏引擎,配置好p2物理引擎(是个坑,详情查看官方手册模块化配置和第三方库的使用方法)

搞起来:

步骤大致有这四个,1、创建世界world,2、创建刚体body,3、给刚体创建形状shape,4、用egret把世界给渲染(图形化)出来。对p2不太熟悉的推荐先看看这篇文章p2入门手册

1、创建世界

    //创建world 
    var world: p2.World = new p2.World();
    //一定时间后(刚体休息不动了)停止不必要的模拟,减少消耗
    world.sleepMode = p2.World.BODY_SLEEPING;

2、创建地面和长方形物体

//创建地面       
var gshape: p2.Plane = new p2.Plane();//创建地面形状shape
var gbody: p2.Body = new p2.Body({
    position: [0,-sh / 2]
});//创建地面刚体,sh是舞台高度转化到物理世界的值
gbody.addShape(gshape);//把形状放到刚体里面
world.addBody(gbody);//把刚体放到世界里面

//创建长方形物体
var boxShape: p2.Shape = new p2.Rectangle(2,1);//创建长方形形状
var boxBody: p2.Body = new p2.Body({ mass: 1,position: [sw / 2,0],angularVelocity: 1 });//创建长方形刚体
boxBody.addShape(boxShape); //把形状放到刚体里面
world.addBody(boxBody); //把刚体放到世界里面

3、显示(渲染)刚体前

p2本身是不会画图的,他出逻辑,egret出图。这意味着我们每创建一个p2刚体,都得为其创建一个egret显示对象,然后把p2刚体的位置角度等信息及时同步给它相应的egret显示对象,这样它就能呈现在在画面上了。
p2世界的单位和坐标不同于egret,锚点的位置也不同,想要同步,需要明白这个:

a、p2的坐标和egret的坐标不同

这里写图片描述

b、p2的单位和egret单位不同
p2的坐标系不单是原点和方向跟传统的Egret坐标系不一样,连单位也是有差别的,长度单位有一个比例,每一个涉及位置的计算,都需要按该比例进行换算得出。该比例因数为factor = 50。

c、p2的锚点和egret的锚点不同
p2刚体的默认锚点是在中间,egret显示对象的锚点默认位于其左上角。何意?看图:

这里写图片描述

d、因此
在我们的示例中,
长方形被画在舞台顶部中间,所以它的位置应该是position:[sw / 2,0] (sw是舞台宽度)。
地面是被画在舞台中间,所以它的位置应该是position:[0,-sh/2] (sw是舞台宽度)。
长方形刚体的egret显示对象锚点从左上角修改到中央:

4、显示(渲染)刚体
这一步要做的就是及时同步p2中刚体的位置角度等信息给它的egret显示对象啦。
在我们的示例中,

a、有一个长方形刚体和地面刚体,因此我们先分别给他们建立egret显示对象,并且关联他们:

        //创建地面       
    var gshape: p2.Plane = new p2.Plane(); 使用plane可以创建平面,它是不会动的,这里我们用它来创建地面
    var gbody: p2.Body = new p2.Body({
        position: [0,-sh / 2]
    }); 
    gbody.addShape(gshape);
    world.addBody(gbody);
    //为地面创建egret显示对象   
    var ground: egret.DisplayObject = this.createGround();//写了个函数,画宽度为舞台宽度、高40px的egret长方形做P2地面的显示对象
    //下面这行代码就是实现同步的精华,只一步就把p2地面刚体和egret地面显示对象关联起来了。
    gbody.displays = [ground]; <pre name="code" class="plain" >// 把渲染好的物体呈现到舞台
    this.addChild(ground);


    //创建长方形
    var boxShape: p2.Shape = new p2.Rectangle(2,1);
    var boxBody: p2.Body = new p2.Body({ mass: 1,position: [sh / 2,sw / 2],angularVelocity: 1 });
    boxBody.addShape(boxShape);
    world.addBody(boxBody);
    //为长方形创建egret显示对象   
    var display: egret.DisplayObject = this.createSprite();//写了个函数,画宽度为80px、高40px的egret长方形做p2长方形的显示对象
    display.width = (<p2.Rectangle>boxShape).width * factor;
    display.height = (<p2.Rectangle>boxShape).height * factor;
    display.anchorOffsetX = display.width / 2
    display.anchorOffsetY = display.height / 2;

    private createGround(): egret.Sprite {
        var result: egret.Sprite = new egret.Sprite();
        result.graphics.beginFill(0x2d78f4);
        result.graphics.drawRect(0,0,600,40);
        result.graphics.endFill();
        return result;
    }    

    private createSprite(): egret.Sprite {
        var result: egret.Sprite = new egret.Sprite();
        result.graphics.beginFill(0x37827A);
        result.graphics.drawRect(0,0,80,40);
        result.graphics.endFill();
        return result;
    }

b、物理世界也是有时间的,刚体也是会动的,所以我们要随着时间推进,不断的把刚体的位置角度信息同步给它的egret显示对象

    //通过添加帧事件,把监听到的刚体信息及时同步给egret显示对象
    egret.Ticker.getInstance().register(function(dt) {
         //让物理世界的时间推进起来
         world.step(dt / 1000);
        //同步长方形刚体的位置角度给它的egret显示对象display</span>
        ground.x = gbody.position[0] * factor;
        ground.y = sh - gbody.position[1] * factor;
        ground.rotation = 360 - gbody.angle * 180 / Math.PI;

        //同步长方形刚体的位置角度给它的egret显示对象display
        display.x = boxBody.position[0] * factor;
        display.y = sh - boxBody.position[1] * factor;
        display.rotation = 360 - boxBody.angle * 180 / Math.PI;
        //长方形休眠时改变它的透明度以便我们知道
        if(boxBody.sleepState == p2.Body.SLEEPING) {
             display.alpha = 0.5;
        } else {
             display.alpha = 1;
        }
    },this); 

c、大功告成

终极代码:把egret的入口类即Main.ts文件内容改成这个即可


class Main extends egret.DisplayObjectContainer{
    public constructor() { 
        super();
        this.addEventListener(egret.Event.ADDED_TO_STAGE,this.onAddToStage,this);
    }

    private onAddToStage(event:egret.Event){

        var factor: number = 50;        
        var sh: number = (egret.MainContext.instance.stage.stageHeight) / factor;
        var sw: number = (egret.MainContext.instance.stage.stageWidth) / factor;
        //创建world
        var world: p2.World = new p2.World();
        world.sleepMode = p2.World.BODY_SLEEPING;
        //创建地面       
        var gshape: p2.Plane = new p2.Plane();
        var gbody: p2.Body = new p2.Body({
                position:[0,-sh/2]
            });
        gbody.addShape(gshape);
        world.addBody(gbody);
        //添加显示对象   
        var ground: egret.DisplayObject = this.createGround();
        gbody.displays = [ground];
        this.addChild(ground);


        //添加长方形刚体
        var boxShape: p2.Shape = new p2.Rectangle(1,1);
        var boxBody: p2.Body = new p2.Body({ mass: 1,position: [sw / 2,0],angularVelocity: 3 });
        boxBody.addShape(boxShape);
        world.addBody(boxBody);
        //添加长方形刚体的显示对象   
        var display: egret.DisplayObject = this.createSprite();
        display.width = (<p2.Rectangle>boxShape).width * factor;
        display.height = (<p2.Rectangle>boxShape).height * factor;
        display.anchorOffsetX = display.width / 2
        display.anchorOffsetY = display.height / 2;
        //同步egret对象和p2对象
        boxBody.displays = [display];
        this.addChild(display);

        //添加帧事件侦听
        egret.Ticker.getInstance().register(function(dt) {
            //使世界时间向后运动
            world.step(dt / 1000);
            ground.x = gbody.position[0] * factor;
            ground.y = sh - gbody.position[1] * factor;
            ground.rotation = 360 - gbody.angle * 180 / Math.PI;

            display.x = boxBody.position[0] * factor;
            display.y = sh - boxBody.position[1] * factor;
            display.rotation = 360 - boxBody.angle * 180 / Math.PI;
            if(boxBody.sleepState == p2.Body.SLEEPING) {
                display.alpha = 0.5;
            }else {
                display.alpha = 1;
                    }
        },this);       
    }

    private createGround(): egret.Sprite {
        var result: egret.Sprite = new egret.Sprite();
        result.graphics.beginFill(0x2d78f4);
        result.graphics.drawRect(0,0,600,40);
        result.graphics.endFill();
        return result;
    }   


    private createSprite(): egret.Sprite {
        var result: egret.Sprite = new egret.Sprite();
        result.graphics.beginFill(0x37827A);
        result.graphics.drawRect(0,0,80,40);
        result.graphics.endFill();
        return result;
    }
}
egret p2物理引擎 遇到的坑(1) Python微信订餐小程序课程视频 https://edu.youkuaiyun.com/course/detail/36074 Python实战量化交易理财系统 https://edu.youkuaiyun.com/course/detail/35475 直接将pythsic包丢到libs目录下并且修改egretPropertis.json文件 TypeError [ERR\_INVALID\_ARG\_TYPE]: The "to" argument must be of type string. Received 阅读详情

相关推荐

Egret-P2物理引擎小球实例开发指南

Egret框架是一个开源的HTML5游戏和应用开发框架,它使用TypeScript作为开发语言,配合Egret引擎,为开发者提供了一套全面的解决方案来构建高性能的跨平台应用程序。该框架特别注重于游戏开发,但也可用于开发各种类型的应用程序,支持从PC端到移动端的跨平台运行。P2物理引擎是一款开源的二维物理引擎,它适用于JavaScript和TypeScript语言,能够为游戏开发或任何需要物理模拟的应用提供基础的物理模拟功能。

weixin_33173126的博客 798

Egret中使用P2物理引擎

游戏中的对象按照物理规律移动,体现重力、引力、反作用力、加速度等物体特性,实现自由落体、摇摆运动、抛物线运动,以及物理碰撞现象的模拟。用于模拟物理碰撞、物理运动的引擎称为物理引擎。来自瑞典斯德哥尔摩大学的Stefan Hedman基于JavaScript,开发了一款面向HTML游戏的2D物理引擎,P2物理引擎。P2和Box2D物理引擎一样,集成了各种复杂的物理公式和算法,帮助实现碰撞、加速、自由...

weixin_30445169的博客 1552

egret p2 物理引擎

egret 游戏引擎 p2 Physic物理库 免费下载地址

Egret + P2物理引擎入门教程

虽然P2被开发者吐槽 “刚体碰撞出错,刚体穿透时常发生,社区也不活跃,资料少,物理效果欠佳” ,但是作为Egret官方推荐的物理引擎,还是有必要学习使用。

Alvin的专栏 2936

egret封装物理引擎p2

egret 引擎封装物理引擎p2,里面封装了,各种p2事件,方便使用

基于egret项目P2物理引擎小球实例

基于egret的P2物理引擎,想研究的可以下载来看看,可以直接使用哦

【egret H5引擎文档备份】 第三方库的使用方法

由于 js 与 ts 在语法结构上的差异,在 ts 中不能直接调⽤用 js 库的 API,所以TypeScript 团队提供了一套虚构声明语法,可以把现有代码的 API ⽤头⽂件的形式描述出来,扩展名为 d.ts(d.ts 命名会提醒编译器这种⽂件不需要编译)。另外,由于一些流行的 js 库在快速更新,可能会发生找到的 d.ts ⽂件定义与 js 库的版本不一致⽽导致其中的 API 并没有完全对应的问题。第三方库可以是标准的 ts 库,也可是在网上下载现成的 js 库,或者是开发者自己写的 js 库。

u014686778的博客 448

AMPE Egret P2 编辑器

Air Monkey Physics Editor是Air Monkey Studio为Egret P2物理游戏快速开发而创建的“可视化编辑器”,设计物理模型若能在AMPE可视化环境中设计,则可以有如下的特性 1,完美支持Egret p2中物理对象的可视化创建,快速设计物理模型,包括各种物理形状,刚体约束,刚体弹性,快速完成物理对象的属性编辑等 2,流程简化,步骤之间松耦合,可以节约时间 3,在图形和符号基础上,方便理解模型 4,在可视化环境中快速直观创建和调整模型 5,美术皮肤可以快速批量导出毛坯资源给美术 6,方便的皮肤配置编辑,从美术美化的文件可以快速加入到模型,也完美支持皮肤重用 7,对于常用物理模型归档,以备重用 8,不断完善的用户手册和指南教程

Egret中p2物理引擎的调试视图类

Egret中p2物理引擎的调试视图类Egret官方提供的例子中的调试视图类p2DebugDrawdrawCircle 圆形drawConvex 多边形(含不规则形状,但我没试过)说明 Egret官方提供的例子中的调试视图类p2DebugDraw https://github.com/egret-labs/egret-game-library/blob/master/physics/demo2/sr...

weixin_42725451的博客 602

VCS多lib编译实战:如何高效处理Verilog模块重命名与分开编译

本文深入探讨了在复杂SoC设计中,如何利用VCS工具实现多库编译,以高效处理Verilog模块重命名与分开编译的工程难题。通过解析synopsys_sim.setup配置、Config映射机制,并提供完整的自动化脚本实战指南,帮助工程师构建健壮、可维护的编译环境,从而显著提升大型项目的编译效率和代码管理灵活性。

weixin_29169505的博客 357

MDPI期刊投稿全流程解析:从注册到提交的实用指南

本文详细解析了向MDPI期刊投稿的全过程,从注册账号、完善个人资料、上传稿件,到填写作者信息、推荐审稿人及提交附信等关键步骤。指南强调了使用机构邮箱、遵循期刊模板、认真准备Cover Letter等实用技巧,旨在帮助作者高效、规范地完成投稿,避免常见错误,提升稿件处理效率。

weixin_29250403的博客 924

1. 创建P2物理项目一p2.js物理引擎详细教程

1. 创建P2物理项目: 使用P2物理引擎创建物理应用的过程和Box2D类型,步骤是:创建world、创建shape、创建body刚体、实时调用step()函数更新物理模拟计算;基于形状、刚体使用Egret或其他HTML渲染以显示物理模拟效果。  1)世界world: world是P2物理引擎入口,对应World类,用于承载所有物理模拟对象。world类的构造函数为:  // 创...

张庆超的博客 2422

论文选题难?7种AI加持的万能选题法(全专业通用+工具实测)

AI时代学术选题新范式:7大智能方法破解研究痛点 传统选题方法面临范围失控、资料难寻、创新不足三大痛点,本文提出AI赋能的7种选题方法论: 1.现象+群体法:自动抓取热点与人群特征 2.理论+场景法:经典理论与新兴场景匹配 3.技术+问题法:前沿技术与领域痛点结合 4.对比+变量法:时空维度与变量关系分析 5.热点+理论法:事件传播与理论深挖融合 6.微调+变量法:已有选题变量置换创新 7.AI全流程法:关键要素智能迭代生成 同时警示AI使用的伦理边界,需规避虚构文献、伪造数据等风险,并提供针对本科生、研究

Conan_0728的博客 1879

P2物理引擎——物理小球案例

P2物理引擎——物理小球案例 本教程为大家介绍如何实现Egret官方物理小球的示例效果,借助这个例子简单的介绍了P2物理引擎的使用。 * 第三方库的引入 * 创建一个P2物理项目 1. 第三方库的引入 首先新建一个项目。 在GitHub上下载包括P2物理引擎库的完整第三方库,解压后按照路径找到physics模块。 将physics模块放到新建项目根目录的同级目录。 修改egret...

duan003387的博客 5956

统一大型语言模型和知识图谱:路线图

大型语言模型(LLM),如ChatGPT和GPT4,由于其涌现能力和泛化性,正在自然语言处理和人工智能领域掀起新的浪潮。然而,LLM是黑箱模型,通常无法捕捉和获取事实知识。相反,知识图谱(KGs),例如维基百科和华普,是显式存储丰富事实知识的结构化知识模型。KGs可以通过为推理和可解释性提供外部知识来增强LLM。同时,KGs很难从本质上构建和演化,这对KGs中现有的生成新事实和表示未知知识的方法提出了挑战。因此,将LLM和KGs统一在一起并同时利用它们的优势是相辅相成的。

qq_32907491的博客 2842

基于YOLOv5与海康工业相机的高分辨率实时检测实践

本文详细介绍了基于YOLOv5与海康工业相机的高分辨率实时检测实践,通过优化相机配置、网络传输和YOLOv5模型适配,实现了每秒15帧以上的实时检测性能,缺陷识别准确率高达99.2%。特别适用于电子元件焊接点检测、精密齿轮齿痕检查等对微小缺陷敏感的场景。

weixin_30872499的博客 474

学习笔记之egret中使用P2物理引擎创建类半圆弧地面

前白:突然间的感想,开始自己的笔记记录,内容比较初级,目的也就是记录一下自己的学习旅程,路过的大佬希望手下留情。 需求:大概就是一个不断掉落小球,然后落在一个半圆里面 加个旁白:自己也是第一次使用物理引擎,有不足之处多指教 前文:P2的形状也就那么几个,要弄个半圆弧,没有直接能用的,只能自己去变通,弄个类半圆弧,看起来像是半圆就好了。这里用的就是p2.Heightfield这个类。具体如何实现看下...

qq_32319799的博客 639

中文核心:swin transformer 农作物病虫害识别 完整代码数据

中文核心:swin transformer 农作物病虫害识别

939

《菜鸟教程》| P2物理引擎——物理小球案例

本教程使用P2物理引擎实现了Egret官方的物理小球示例效果。如有不懂可以查看P2物理引擎GitHub地址或者是EgretP2物理系统文档。 第三方库的引入 创建一个P2物理项目 1. 第三方库的引入   首先新建一个项目。   在GitHub上下载包括P2物理引擎库的完整第三方库,解压后按照路径找到physics模块。 将physics模块放到新建项目根目录的同级目...

u010392459的专栏 1154

YOLO26 无损剪枝:稀疏训练 + 结构化通道裁剪

YOLO26 无损剪枝链路:YOLO26s (7.2M) → 稀疏训练 30 epoch (L1 on BN gamma, lam=0.01) → 阈值剪枝 50% (gamma<quantile(0.5)) → 结构化重建 Conv+BN → 微调 10 epoch (lr=1e-4) → YOLO26n (1.9M, mAP50 0.808, 仅降 0.6%)。核心贡献:稀疏训练让 BN gamma 趋向二元分布 (近 0 或近 1), 剪枝阈值可直接取 median 自动 50% 压缩。

m0_64661770的博客 263

基于MATLAB的鲁棒主成分分析(Robust PCA)图像去噪

鲁棒主成分分析(Robust PCA)是一种有效的图像去噪方法,它能够在保持图像细节的同时去除噪声。本文将介绍如何使用MATLAB实现基于鲁棒PCA的图像去噪,并提供相应的源代码。它假设噪声是随机的、高斯分布的,并将图像分解为一个低秩矩阵和一个稀疏矩阵的和。低秩矩阵表示图像的结构和纹理信息,稀疏矩阵表示图像中的噪声和细节信息。接下来,我们将图像矩阵减去均值,得到规范化的图像矩阵。然后,我们将灰度图像转换为矩阵形式,并计算图像的均值。通过分离出低秩矩阵和稀疏矩阵,我们就得到了去噪后的图像和残差图像。

DevRevolt的博客 1125

0. 总纲及egret引入p2库一p2.js物理引擎详细教程

前言: p2的文档真是难找, 不知道为什么官方会推荐p2...  这些都是我在网上整理出来的, 希望对各位有所帮助 总纲: 1.创建p2物理项目 2.用p2DebugDraw实现模拟视图 3.p2中的形状 4.刚体属性 5.刚体操作 6.碰撞处理 7.关节 egret引入p2库 首先新建一个项目。 1.在GitHub上下载包括P2物理引擎库的完整第三方库,解压后按照路径找到...

张庆超的博客 1592

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

使用P2物理引擎制作物理小球

今天分享的内容是:基于Egret使用P2物理引擎实现物理小球示例效果。 了解更多信息,您可以查看P2物理引擎GitHub地址或者是EgretP2物理系统文档。 第三方库的引入 创建一个P2物理项目 一、第三方库的引入 1.首先新建一个项目。 2.在GitHub上下载包括...

chengyipin0715的博客 326

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

2. 用p2DebugDraw实现模拟视图一p2.js详细教程

p2DebugDraw下载地址     2. 用p2DebugDraw实现模拟视图: 因为P2只是进行了物理模拟计算,没有对模拟结果进行渲染,可以基于Egret引擎编写渲染绘图的类,如p2DebugDraw。 p2DebugDraw类的构造函数为:  function p2DebugDraw(world:p2.World, sprite:egret.Sprite) // 其中,world...

张庆超的博客 1182

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Egret P2 入门学习资料

1 p2库下载:https://github.com/egret-labs/egret-game-library/tree/rc/4.1.0 2 p2 作者demo:https://github.com/schteppe/p2.js 3 p2 在线API:http://schteppe.github.io/p2.js/docs/ 4 Egret教程: 认识HTML5物理引擎P...

weixin_30443895的博客 291
上一篇: 【egret】Tween类
下一篇: 【C#】 Console类
Elk_1024
博客等级 码龄10年 10粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值