基于2D多边形的碰撞检测和响应(六)

本文详细介绍了2D环境中刚体碰撞检测的核心算法,包括如何计算碰撞多边形间的触点,以及处理不同类型的碰撞情况,如点边碰撞和边边碰撞等。
六、计算触点
为了动态的移动刚体,我们需要精确计算两个碰撞多边形之间的触点。对于2D来说这并不复杂,但是在3D场景中会变得非常复杂。在2D情况下,可以考虑两种情况,点和边的相交或者是边和边的相交。
 
这个处理过程几乎不需要教程,但是它非常适合于一个可视化的演示

这里,我只考虑交叠的情况,这个原理也适用于碰撞的情况。
现在给出一个碰撞的法向,在点边接触的情况下,如何求得触点?
对于接触点A,它是直接向前的。我们需要调用一个支撑映射函数,他将返回多边形在制定方向上的最低点,非常类似于第一个例子中的CalculateInterval()函数

int FindSupportPoints(const Vector& N, float t,
                      const Vector* A, int Anum,
                      const Vector& PA, const Vector& VA,
                      const Matrix& OA, Vector* S)
{
    Vector Norm = N ^ OA;
    float d[32];
    float dmin;
    dmin = d[0] = A[0] * Norm;

    for(int i = 1; i < Anum; i ++)
    {
        d[i] = A[i] * Norm;

        if (d[i] < dmin)
        {
            dmin = d[i];
        }
    }

    int Snum = 0;

    const float threshold = 1.0E-3f;

    for(int i = 0; i < Anum; i ++)
    {
        if (d[i] < dmin + threshold)
        {
            S[Snum++] = Transform(A[i], PA, VA, OA, t);
           
            if (Snum == 2)
                return Snum;
        }
    }
    return Snum;
}

这里,函数的第一部分找到多边形的最小值。第二部分简单的找到接近最小值的所有点,因此如果碰撞法线垂直于一条边,将返回两个点。这两个点将以世界坐标存贮,变换函数将确保多边形的触点被转化为世界坐标,并且如果是一个未来的碰撞,这个点将被转化为碰撞时刻的

Vector Transform(const Vector& Vertex, const Vector& P, const Vector& V, const Matrix& xOrient, float t)
{
    // convert point into world space
    Vector T = P + (Vertex * xOrient);

    // collision forwatd in time, need to translate to moment of collision
    if(t > 0.0f)
        T += V * t;
    return T;
}

对于B上的点,你只需要简单地在反方向找到一个支撑点,在以后的处理中我们需要一对位于两个物体上的支撑点来做物理模拟推力并使物体旋转,你可以从上图中发现在不同的碰撞情况下你需要得到的一对触点。
 
现在,调用FindSupportPoint()函数在每个物体上返回一个或两个触点。在一对一触点的情况下,不需要做任何事情,现在,还不支持一对一的接触,但是它能够非常容易的扩展到分离轴算法中。
 
在一对二接触的情况下,它是一个简单的点对边的碰撞,如上图中的第一个图
在二对一接触的情况下,可以同样运用上述情况,除了物体被交换外
在二对二接触的情况下,他是一个边边碰撞,你需要找到两个边的交叠区域。
 
首先对于点边碰撞,在这种情况下,一对碰撞点可以简单的通过将A上的碰撞点投影到B的边上来实现,或者说是B的边上最接近A触点的点

Vector FindClosestPoint(const Vector& V, const Vector& A, const Vector& B, float* pt)
{
    Vector AV = V - A;
    Vector AB = B - A;
   
    float t = (AV * AB) / (AB * AB);

    if (t < 0.0f)
        t = 0.0f;
    else if (t > 1.0f)
        t = 1.0f;

    if (pt) *pt = t;

    Vector P = A + t * AB;
    return P;
}

在边对边碰撞的情况下,处理过程非常类似。只是你需要沿着沿着碰撞法线的垂直方向排序点,并得到两个中间点。然后,将它们投影到另外的边上以便得到一对触点。

有了这些触点,你就可以编写一个基本的刚体系统,物体将比以前更真实的相互碰撞并响应碰撞。
 
内容概要:本文提出了一种基于非合作博弈理论的居民负荷分层调度模型,并结合双层鲸鱼优化算法(Two-level Whale Optimization Algorithm)进行高效求解,模型与算法均通过Matlab代码实现。研究针对电力系统中居民侧用电负荷的复杂调度问题,引入非合作博弈机制刻画各用户之间的利益竞争关系,实现负荷的分层优化分配;同时设计双层优化架构,上层优化资源配置,下层模拟用户自主决策行为,提升了模型的实用性与合理性。通过智能优化算法求解多层级、非凸非线性的博弈模型,有效提高了调度方案的收敛性与全局寻优能力,适用于现代智能电网中的需求侧管理与能源优化场景。; 适合人群:具备电力系统基础理论知识和Matlab编程能力,从事智能电网、能源优化调度、需求侧管理、博弈论应用等方向的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于居民区电力负荷的分层优化调度系统设计与仿真分析;②为非合作博弈在多主体能源系统建模中的应用提供方法论支持;③利用双层鲸鱼算法解决具有嵌套结构的复杂双层优化问题,提升求解效率与调度方案的可行性。; 阅读建议:建议读者结合提供的Matlab代码深入理解模型构建逻辑与算法实现流程,重点关注博弈模型的效用函数设计、纳什均衡求解思路以及双层优化结构的迭代机制,宜配合实际用电数据开展复现实验以验证模型有效性与鲁棒性。
内容概要:本文围绕基于自适应神经模糊推理系统(ANFIS)智能控制器的可再生能源微电网功率管理系统展开研究,结合Simulink仿真实现,深入探讨了微电网中功率的智能调控与经济机组组合调度问题。通过引入ANFIS控制器,有效应对风能、光伏等可再生能源出力的波动性与不确定性,提升系统运行的稳定性与电能质量。研究内容涵盖微电网多源协调控制策略、功率平衡管理、优化调度模型构建及仿真验证,实现了对分布式电源、储能系统和负荷的协同优化,兼顾经济性与可靠性目标,并通过仿真平台验证了所提方法的有效性与优越性。; 适合人群:具备电力系统、自动化或新能源相关专业背景,熟悉Matlab/Simulink仿真环境,从事微电网能量管理、智能控制、能源优化等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高比例可再生能源接入场景下的微电网能量管理系统研发与教学实践;②为实现微电网功率稳定控制与经济高效运行提供先进的智能控制解决方案;③支撑高水平学术论文复现、科研课题攻关及实际工程项目的仿真验证与方案优化。; 阅读建议:建议结合提供的Simulink模型与相关代码进行动手实践,重点关注ANFIS控制器的设计流程、规则库构建与参数调优方法,并通过与传统PID或MPC控制策略的对比实验,深入理解其在动态响应与鲁棒性方面的优势。同时可进一步拓展文中提出的优化调度逻辑,应用于多目标、多约束的复杂实际应用场景中。
内容概要:本文档聚焦于“直流电机双闭环控制Matlab仿真”,系统阐述了基于Matlab/Simulink平台实现直流电机双闭环控制系统(主要包括速度环与电流环)的设计与仿真全过程。通过构建直流电机的数学模型,结合PI控制器进行调控,实现对电机转速和电枢电流的高精度动态控制,验证控制策略的稳定性与响应性能。文档详细介绍了仿真模型的搭建流程、关键参数的整定方法、系统动态波形的分析手段以及仿真结果的有效性验证,体现了经典自动控制理论在实际电机系统中的工程应用,是电机控制与电力电子技术相结合的典型研究案例。; 适合人群:具备自动控制原理、电机与拖动基础、电力电子技术和Matlab/Simulink仿真能力的电气工程、自动化、机电一体化等专业的本科生、研究生及从事电机驱动系统研发的工程技术人员。; 使用场景及目标:①作为高校课程设计或实验教学材料,帮助学生深入理解双闭环调速系统的工作机理与工程实现;②服务于科研项目,为新型电机控制算法(如滑模、模糊PID等)的开发与性能对比提供基础仿真验证平台;③作为工业界产品前期设计的仿真工具,用于评估不同控制策略在动态响应、抗干扰能力和稳态精度方面的可行性。; 阅读建议:建议读者在学习过程中紧密结合自动控制理论知识,亲手在Simulink环境中搭建完整的双闭环仿真模型,通过反复调整PI控制器的比例与积分参数,观察并分析转速、电流的阶跃响应曲线,从而深刻理解反馈控制的本质、系统稳定性条件以及参数整定对动态性能的影响,进而掌握电机控制系统的设计精髓。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值