zoukankan      html  css  js  c++  java
  • p2 关节

    P2中使用Constraint及其子类表示关节,也就是将两个刚体按照指定的规则约束在一起,形成有规律的、相互限制的运动模拟。P2关节模拟中,两个刚体没有通过任何刚体连接,只是通过算法模拟出关节运动轨迹。为了更加直观,p2DebugDraw类中使用黑色的线段表示连接刚体的连杆,黑点圆的表示关节节点anchor。 
    P2中关节有5种,每一种都有独特的约束规则,包括距离关节DistanceConstraint、齿轮关节GearConstraint、锁定关节LockConstaint、位移关节PrismaticConstraint、旋转关节Revilute Constraint。 
    1)距离关节DistanceConstraint:
    按照指定的距离distance将两个刚体约束在一起,其中任何一个刚体的位置发生变化,会牵着另一个刚体运动,以保证两者的间距为distance。但是两个刚体的角度不受约束,可以绕着节点旋转。DistanceConstraint构造函数为: 
    function DistanceConstraint(bodyA:Body, bodyB:Body, options:object) 
    其中,bodyA和bodyB为受约束的刚体,options为关节设置选项,可以缺省,P2以默认值设置,其中选项为: 
    ·distance:两个刚体受到约束时保持的间距,默认为添加关节时两个刚体之间的间距 
    ·localAnchorA:关节点相对于刚体bodyA本地坐标系统的坐标系,默认[0,0] 
    ·localAnchorB:关节点相对于刚体bodyB本地坐标系统的坐标系,默认[0,0] 
    ·maxForce:刚体运动中,如果距离不等于distance,为保持距离而对刚体施加的最大作用力,默认为Number.MAX_VALUE 
    除了上面的构造函数中的参数,距离关节还包含一些属性: 
    ·lowerLimit:设置距离关节约束范围下限,即bodyA到bodyB的距离最小值,默认为0,该属性必须大于0。只有当lowerLimitEnabled为true时才起作用。 
    ·lowerLimitEnabled:是否设置距离关节约束范围下限,默认false。 
    ·upperLimit:设置距离关节约束范围上限,即bodyA到bodyB的距离最大值,默认为0,该属性必须大于0。只有当upperLimitEnabled为true时才起作用。 
    ·upperLimitEnabled:是否设置距离关节约束范围上限,默认false 
    ·position:bodyA和bodyB的当前间距 
    可以通过joint.collideConnected属性为true,避免平台和车轮之间的碰撞。创建完成后需要使用world的addConstraint(joint)方法将关节加入世界。 
    2)齿轮关节GearConstraint:
    按照指定的比例ratio,将两个刚体的角度angleA和angleB约束为angle=angleB*ratio。其中任何一个刚体的角度变换,都会牵着另一个刚体的角度变化,以确保两个刚体角度的比例为ratio。刚体的坐标位置不受约束,可以自由向任意方向移动。构造函数为: 
    function GearConstraint(bodyA:body, bodyB:Body, options:Object) 
    其中,bodyA和bodyB为受关节约束的两个刚体,options为关节设置选项,可以缺省,P2会按默认值进行设置。选项为: 
    ·angle:两个刚体的相对角度差,齿轮关节会将一个刚体的角度减去该角度差后,再保证角度变化量的比例为ratio 
    ·ratio:两个刚体的角度变化量的比例,当ratio=2时,bodyB旋转180°,bodyA只转90° 
    ·maxForce:当两个刚体的角度比例不是ratio时,为将其约束为ratio而对刚体施加的最大扭力 
    齿轮关节还有两种方法: 
    ·setMaxForce(force):当bodyB的角度偏离angle,齿轮关节对bodyB施加的最大扭力 
    ·getMaxForce():number:获取setMaxForce()中设置的最大作用力 
    3)锁定关节LockConstraint:
    将两个刚体绑定在一起,使其相对坐标位置、角度差保存不变,仿佛被钉在一起。此关节中的任何刚体坐标或角度发生变化,都会牵着另一个刚体的坐标和角度变化,以确保两个刚体相对坐标和角度分别为localOffsetB和localAngleB。构造函数: 
    function LockConstraint(bodyA:Body, bodyB:body, options:Object) 
    其中,bodyA和bodyB为受关节约束的两个刚体,options为关节设置选项,可以缺省,P2会按默认值进行设置。选项为: 
    ·localOffsetB:刚体bodyB在关节约束下,相对于bodyA本地坐标系的偏移量,默认为添加关节时两个刚体的相对位置 
    ·localAngleB:刚体bodyB在关节约束下,相对于bodyA本地坐标系统的角度,默认时为添加关节时两个刚体的相对角度 
    ·maxForce:当两个刚体未达到关节约束的localOffsetB和localAngleB,为使其达到约束指定状态,而可以施加的最大作用力,默认Number.MAX_VALUE 
    LockConstraint还包含几个方法: 
    ·setMaxForce(force):当bodyB的位置偏离localOffsetB,或角度差不等于localAngleB时,锁定关节对bodyB施加的最大作用力。 
    ·getMaxForce():number:获取setMaxForce()中设置的最大作用力 
    4)位移关节PrismaticConstraint:
    将刚体bodyB的运动方向,限定为在刚体bodyA本地坐标系统中的一个指定向量。构造函数为: 
    function PrismaticContraint(bodyA:Body, bodyB:Body, options:Object) 
    其中,bodyA和bodyB为受约束的刚体,options为关节设置选项,可以缺省,P2以默认值设置,其中选项为: 
    ·maxForce:当bodyB相对于bodyA的位置偏离localAxisA时,为使其恢复到约束位置,可以施加的最大作用力,默认为Number.MAX_VALUE 
    ·localAnchorA:控制点anchorA在bodyA本地坐标系下的坐标,默认[0,0] 
    ·localAnchorB:控制点anchorB在bodyB本地坐标系下的坐标,默认[1,0] 
    ·localAxisA:刚体受到约束时只可以在该坐标轴方向上移动,这是刚体bodyA坐标系下的一个向量,默认[1,0] 
    ·disableRotationalLock:是否禁止bodyB绕节点旋转,默认false,即bodyB不能自由旋转,此值只有在构造函数中设置才起作用。 
    ·upperLimitEnabled:是否开启bodyB移动方向上限,默认false,此时可以沿localAxisA正方向无限移动 
    ·upperLimit:设置bodyB沿localAxisA正方向可以移动的最大距离,默认为1 
    ·lowerLimitEnabled:是否开启bodyB移动方向下限,默认false,此时可以沿localAxisA负方向无限移动 
    ·lowerLimit:设置bodyB沿localAxisA负方向可以移动的最大距离,默认为0,该属性值要小于upperLimit 
    除了上述在构造函数中的参数,PrismaticConstraint还有其他一些属性: 
    ·motorEnabled:是否开启马达属性,与motorSpeed配合使用。开启后,关节会对bodyB施加作用力,使其线速度达到motorSpeed,并在约束范围内一直保持该速度。开启或关闭马达属性,要用enableMotor()和disableMotor()方法。 
    ·motorSpeed:开启马达属性后,bodyB的目标速度值 
    ·position:在localAxisA上,bodyB相对于bodyA的当前位置 
    PrismaticConstraint还有一些方法,用于调整关节的相关属性: 
    ·setLimits(lower, upper):设置位移关节的上下限,其中lower一定要小于upper 
    ·disableMotor():关闭马达属性 
    ·enableMotor():开启马达属性 
    可以创建一个空刚体来固定关节。所谓空刚体,就是没有包含任何形状对象的刚体,所以不会与任何刚体发生碰撞模拟。 
    5)旋转关节RevoluteConstraint:
    限制两个刚体只能绕指定的控制点旋转,该控制点是刚体bodyA本地坐标系下的坐标。其中一个刚体的位置或角度发生变化时,为了确保控制点和刚体的相对位置不变,另一个刚体也会被牵制发生位置和角度的变化。构造函数为: 
    function RevoluteConstraint(bodyA:Body, bodyB:Body, options:Object) 
    其中,bodyA和bodyB为受关节约束的两个刚体,options为关节设置选项,可以缺省,P2会按默认值进行设置。选项为: 
    ·worldPivot:全局坐标系下的关节节点,bodyA和bodyB均受约束,只能绕该节点旋转。设置该节点后,旋转关节会自动计算localPivotA和localPivotB本地节点。 
    ·localPivotA:节点worldPivot在bodyA刚体本地坐标系统下的坐标,默认[0,0] 
    ·localPivotB:节点worldPivot在bodyB刚体本地坐标系统下的坐标,默认[0,0] 
    ·maxForce:当刚体坐标偏离节点时,为使其恢复到节点位置,可以施加的最大作用力,默认为Number.MAX_VALUE 
    RevoluteConstraint还包含几个方法: 
    ·setLimits(lower:number, upper:number):设置bodyB绕节点旋转角度的上下限,值为弧度 
    ·enableMotor():开启马达属性,与setMotorSpeed()配合使用,关节会对bodyB施加扭力,使其达到setMotorSpeed() 
    ·disableMotor():关闭马达属性 
    ·setMotorSpeed(speed):设置bodyB的目标角速度,只有开启马达属性后才其作用。 
    ·getMotorSpeed():number:读取马达的当前速度 
    旋转关节常用于模拟小车运动。

  • 相关阅读:
    Atitit 计算机的组成与设计 目录 1. 计算机系统是由硬件系统和软件系统两大部分组成。  1 1.1. Cpu(alu+cu ) 1 1.2. 存储内存 外村 1 1.3. Io设备 鼠标
    atitit 软件框架类库设计的艺术.docx 目录 1. index 1 2. 第2章 设计api的动力之源 14 2 2.1. .1 分布式开发 14 2 2.2. 2.2 模块化应用程序 16
    Atitit 信息检索 之音乐检索实践 艾提拉注 目录 1. 常规检索 歌手 歌名 1 1.1. 年代检索 1 1.2. 歌词检索(可以依靠web 1 1.3. 哼唱检索 原曲检索(可以使用酷
    Atitit 信息检索 文档资料的查询与检索 目录 1. 索引法 1 1.1. 名字placeholder索引 1 1.2. 文本txt索引 1 1.3. 索引集合包zip 1 1.4. 文件名
    Atitit 微服务实践 艾提拉著 微服务主要解决几个问题负载均很 目录 1. 微服务的模式 http请求层 vs服务层 1 1.1. Http vs 服务层优缺点 1 2. 实现技术 2
    Atitit SpringCloud 使用总结 目录 1.1. 启动一个服务注册中心EurekaServer 1 1.2. 三、创建一个服务提供者 (eureka client) 2 1.3. 创建
    Atitit 文档资料处理重要类库与工具 跨语言api和第三方api跨语言 类库工具 大概功能 功能 Curl httpclient 文件上传下载 数据传输rest doctotext.exe
    Atitit 网盘使用法 艾提拉著 目录 1. 需要解决几个问题 2 1.1. 多关键词搜索的问题 使用every索引解决 2 1.2. 重要文具类索引使用分类索引 日志 crm类增加000前缀
    Atitit 信息化数据采集与分析解析 技术 处理技术 爬虫与http rest json xml h5解析 db数据库 mail协议与处理 数据压缩与解压 数据处理 文本处理
    Atitit mis 管理信息系统概论 艾提拉著 目录 1. 互联网三大定律 2 1.1. 摩尔定律和 2 1.2. 吉尔德定律 电脑及网络宽带资源成为重要免费资源 2 1.3. 梅特卡夫定律 用户
  • 原文地址:https://www.cnblogs.com/honghong87/p/9893224.html
Copyright © 2011-2022 走看看