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

游戏开发实战:用Sutherland-Hodgman算法实现2D角色碰撞检测(附完整代码) 本文深入探讨了在2D游戏开发中,如何应用Sutherland-Hodgman算法实现高精度的多边形角色碰撞检测。通过对比传统AABB方法的局限,详细解析了该算法的核心思想与逐边裁剪策略,并提供了完整的Unity(C#)和Cocos2d-x(C++)实战代码,帮助开发者彻底解决角色“穿模”问题,获取精确的碰撞区域信息以支持复杂的物理响应。 阅读详情

四、 基本弧碰撞响应

下面要作的是用给定的量将两个物体分离,并添加一点摩擦和一些静态摩擦,以便使物体静止在斜面上。

该部分使用简单的速度影响算法。同样,为了使碰撞响应更加真实,物体被赋予了质量(更好的是质量的倒数)。

质量的倒数是比较常用的,该值为零意味着该物体具有无穷大的质量,并因此不能移动。同时速度响应中使用质量的倒数具有更好的物理精确性。

现在我们知道多边形A在位置PA具有速度VA,与位置PB速度VB的多边形B发生碰撞。Ncoll和tcoll定义了碰撞平面。如果碰撞前是交叠的,首先分离两个物体,如下:

if (tcoll < 0)
{
    if (A.InvMass == 0)
        PB += Ncoll * tcoll;
    else if (B.InvMass == 0)
        PA -= Ncoll * tcoll;
    else
    {
        PA -= Ncoll * (tcoll * 0.5f);
        PB += Ncoll * (tcoll * 0.5f);
    }
}

然后可以调用碰撞响应的代码,为了简化,我们可以考虑一个粒子碰到一个平面上

这里V表示粒子的进入速度,V’是粒子发生碰撞后的速度,N为平面的法向。

V’ = V – (2 * (V . N)) * N

理想状态下,碰撞前后粒子的能量是相同的。但是我们可以给粒子的碰撞加入弹性系数

V’ = V – ((1 + elasticity) * (V . N)) * N

弹性系数的范围为[0,1]如果为零意味着粒子将沿着平面滑动,如果为1,粒子将没有能量损耗的弹开。

同样我们可以加入一些摩擦。如果我们沿着碰撞的法线和碰撞平面方向分解速度,我们可以同时计算弹性系数和摩擦力。

这里,速度被沿着平面的法向和平面分解。弹性系数将影响沿着平面法向的响应(Vn),摩擦力将影响速度的切向(Vt)。

同样摩擦系数的范围为[0,1]. 0意味着没有摩擦力,1意味着粒子将突然停止。

Vn = (V . N) * N;
Vt = V – Vn;
V’ = Vt * (1 – friction) + Vn  * -(elasticity);

对于静摩擦力,简单地在速度Vt小于给定的值时设置Vt为(0,0), 或者设置摩擦系数稍微比1大(1.001f)。

现在,计算两个物体间的碰撞响应。原理是相同的。然而,计算是基于物体的相对速度的,物体将象上述一样受到影响。结果将添加到每一个物体上。
 

现在我们需要修改一下系数,因为现在我们使用了相对的概念

Vector V = Va – Vb; // relative velocity
Vn = (V . N) * N;
Vt = V – Vn;

if (Vt.Length() < 0.01f) friction = 1.01f;

// response
V’ = Vt * -(friction) + Vn  * -(1 + elasticity);

Va += V’ * 0.5f;
Vb -= V’ * 0.5f;

这里使物体A和物体B具有相同的响应结果。

为了使结果更加有趣,A和B可以有不同质量。显然较轻的物体会受到较大影响,较重的物体被碰撞影响较小。所以我们可以使用质量来确定两个物体碰撞响应效果。较大的物体具有较小的质量的倒数,如果质量为无穷大质量的倒数为零。

Va += V’ * (InvMassA) / (InvMassA + InvMassB);
Vb -= V’ * (InvMassB) / (InvMassA + InvMassB);

 
二维多边形碰撞检测 有关多边形碰撞检测的文章。 可用于在2D游戏中实现小精灵之间的碰撞。 该算法还可以扩展到3D。 立即下载

相关推荐

碰撞检测及响应算法和相关代码

关于碰撞检测及响应的算法和程序代码,仅供参考。

Unity之2D碰撞器

(1)Geometry Type:几何学类型,合并碰撞体时,碰撞体顶点将组合为两种不同的几何体类型。Synchronous:对2D复合碰撞器或使用的其它碰撞器修改时,Unity立即生成新几何体。(2)Generation Type:生成类型,复合碰撞器在何时生成新几何体。(3)Vertex Distance:从复合碰撞器收集顶点时允许的最小间距值。Material:一种物理材质,用于确定碰撞的属性,控制摩擦和弹性。Used By Composite:将碰撞器附加到2D复合碰撞器。

holens01的博客 3257

快速多边形碰撞检测

多边形碰撞检测 实时检测多边形在移动中的碰撞

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

简介本文是阐述如何在2D动作游戏中进行精确而高效的碰撞检测。这里的碰撞是基于多边形而不是基于精灵的。这两者之间在设计上会有不同。 基于精灵的碰撞检测是通过精灵之间的重叠的像素来完成的。而多边形使用向量数学来精确计算交点,时间和碰撞方向。虽然多边形仅仅是精灵的一个近似,但是它比精灵系统要高级。  可以精确模拟逼真的简单物理学,例如反弹,摩擦,斜面的滑行

NETTE DE BLOG 1万+

2D多边形碰撞算法及示例

本教程包括算法讲解,代码示例和基于OpenGL的算法演示。从最基础的两个多边形碰撞检测到后来的大量物体碰撞的真实物理模拟。

二维多边形的碰撞检测

用c#实现的二维多边形的碰撞检测,含演示demo和源码

C 实现射线检测多边形碰撞

以前,使用旋转分离轴实现过, 矩形旋转碰撞,OBB方向包围盒算法实现 。但这个算法,本身有点复杂,并且在边越多的时候计算量增长的会很快,扩展到3D层面会更加的复杂。而且这个算法碰撞后获取碰撞点的坐标有点繁琐。射线检测算法,是一个比较简单清晰的思路,实现起来复杂度也不高,碰撞点也容易获得,扩展到3D世界依然有效。    要用射线去检测碰撞,之前我们先从一个点开始。如果能够判断一个点是否和多

把理性与逻辑灌入电光石火奔腾流淌的指令集…… 3796

SpringBoot Actuator未授权访问漏洞实战:从发现到利用

本文深入剖析了SpringBoot Actuator未授权访问漏洞的成因、危害与利用手法。文章详细演示了如何发现暴露的端点,并通过实战案例复现了从敏感信息泄露到利用反序列化漏洞实现远程代码执行(RCE)的全过程,为开发与运维人员提供了从漏洞发现到修复加固的完整安全指南。

weixin_29231221的博客 259

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

三、对快速移动的物体做进一步扩展上述方法处理慢速移动物体时会取得非常好的效果。但是当物体移动的非常快时,碰撞系统将失去准确性,丢失碰撞,或者允许物体之间相互穿越,这可不是我们所期望的。 这里我们还是使用分离坐标轴的方法,并进一步扩展,并使用该算法检测未来某时刻的碰撞和交叠。 原理还是相同的,可以使用下面的图片解释:

NETTE DE BLOG 3784

三、STM32F103ZET6最小系统

stm32最小系统除去主控CPU外,需要包含,电源电路,复位电路,BOOT电路,时钟电路(因为stm32有内置时钟,对时钟要求不高的话,可以不要)。NRST引脚其实芯片已经用一个约40K的电阻上拉了,所以理论上来说是不需要再外接上拉电阻的,但我看大家都是有外接上拉的,心里没有底,不管这么多,先预留着。吃过亏,特意查看了芯片手册资料,下图是官方建议的供电方案,图片来自stm32f103zet6数据手册。首先明白目标,单纯的学习软件知识并不是我希望的,我还希望会硬件设计,这样后面才能摆脱开发板。

sevendecsdn的博客 6452

别再花屏了!手把手教你用STM32CubeIDE搞定LVGL 8.3移植(附完整源码)

本文详细介绍了如何在STM32CubeIDE环境下成功移植LVGL 8.3,解决常见的花屏问题。从环境配置、显示驱动优化到编译警告处理,提供完整的实战方案和源码示例,帮助开发者快速实现流畅的嵌入式GUI界面。特别针对STM32平台的DMA2D加速和内存管理进行了深度优化。

weixin_33739646的博客 242

【计算几何】凸多面体重叠判断算法:GJK 算法详解 & C++代码实现二维情形的凸多边形重叠判断

GJK 算法是由 Gilbert,Johnson,Keerthi 三位前辈发明的,用来计算两个凸多面体之间的碰撞检测,以及最近距离。GJK 算法可以在OMNO(M+N)OMN的时间复杂度内,检测出碰撞,算法在每次迭代的过程中,都会优先选择靠近原点的方向,因此收敛速度会很快。算法的证明过程比较复杂,但是原理还是比较容易理解的。GJK的初衷是确定两个凸包之间的距离。GJK还可以用于在小距离穿透情况下获取碰撞信息,并可以通过其他算法进行补充以实现更大距离的穿透。通过随机的方式获取初始方向。

知不足而奋进,望远山而前行 3万+

使用MKL+Eigen求解稀疏矩阵方程组

问题:求解Ax=b的解,其中,A为大型稀疏矩阵,长和宽分别为1500^2。 一般思路: (1)A为对称正定矩阵,对A使用cholesky分解。 (2)A为对称不定矩阵,使用LDL‘分解,即: PAP'=LDL' 其中,L为单位下三角矩阵,D由阶数为1或者2的对角块构成,P是置换矩阵。 (3)不对称矩阵:LU分解。 (4)长方形矩阵(长...

薛晓伟 3445

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

http://yiyo213.iteye.com/blog/813181    简介 本文是阐述如何在2D动作游戏中进行精确而高效的碰撞检测。这里的碰撞是基于多边形而不是基于精灵的。这两者之间在设计上会有不同。 基于精灵的碰撞检测是通过精灵之间的重叠的像素来完成的。而多边形使用向量数学来精确计算交点,时间和碰撞方向。虽然多边形仅仅是精灵的一个近似,但是它比精灵系统要高级。 可以精

hintonic的专栏 2259

Cadence SIP Layout 简单教程-第二章

[从whp1920 网易博客迁移至优快云] 第一章在正式布线之前做了必须做的准备工作,下面进入正题,打开Candence SIP RF Layout GXL软件。 第一节 导入外形尺寸 打开SIP设置文件保存路径,如下图所示进入导入DXF页面,选中前一章时画好的外框图。打开导入界面后,再进入DXF In Edit/View Layers界面选择所有层,导入Class选择DRAWING FOR...

whp1920的博客 6939

光伏逆变器在环测试解决方案

光伏行业是利用太阳能光辐射将其转化为可用电能的行业。近年来,为应对气候变化和能源安全等挑战,全球对清洁能源的需求不断增长。太阳能作为最具潜力和可再生的能源之一,被视为替代传统化石能源的重要选择,光伏行业因此得到了迅猛发展,并在全球范围内得到了广泛应用。许多国家和地区都将光伏技术作为关键的能源发展方向。尤其是在新兴和发展中国家,光伏发电具有巨大的增长潜力,将成为未来市场竞争的重点。随着规模化生产的推进,光伏组件的制造成本不断降低。

shiwei0813的博客 959

碰撞检测和响应

碰撞检测和响应类型:整理 | 来自:86VR | 作者:项周臻 | 时间:2005-1-24 |  点击:2065  碰撞在游戏中运用的是非常广泛的,运用理论实现的碰撞,再加上一些小技巧,可以让碰撞检测做得非常精确,效率也非常高。从而增加游戏的功能和可玩性。2D碰撞检测  2D的碰撞检测已经非常稳定

1659

涨点神器:基于YOLOv8的SPD-Conv小目标检测实战教程——让低分辨率场景检测精度飙升

从代码修改到场景落地,每一步都围绕“提升检测精度”这个核心目标,而实际数据也证明了这项技术的强悍——它不是实验室里的花拳绣腿,而是能真正解决工业痛点的涨点神器。在实际场景中,比如无人机巡检的低分辨率航拍图中,对电线、小设备的检测,YOLOv8-SPD的漏检率降低了70%以上。落地时,只需将训练好的YOLOv8-SPD模型部署到边缘设备或云端,即可享受其在小目标、低分辨率场景下的强大性能。的特征融合模块中,通过插入SPD-Conv,让模型在处理小目标时,既能保留空间细节,又能增强通道维度的特征表达。

m0_71589036的博客 157

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

为了不浪费时间介绍动态刚体,可以直接参参见下面的连接: http://www.d6.com/users/checker/dynamics.htm#articles 这里,展示了如何在2D游戏中实施真实的物理。 我将介绍一些我所做的扩展,首先,计算给定凸多边形的惯量是有技巧的。需要提醒你的是,惯量适用于角度变化,质量适用于线形变化。较高的惯量对应于较大的质量,在这种情况下物体将很难旋...

绿洲de圣光 195

Windows 11 WSL2环境下OpenClaw部署的兼容性问题分析与解决方案研究

本文研究了OpenClaw在Windows 11 WSL2环境下的部署方案。WSL2通过无缝集成Linux与Windows系统,为OpenClaw提供了良好的运行环境,支持GPU加速和跨平台开发。文章详细分析了硬件配置要求(推荐8核CPU/16GB内存/NVMe SSD)、系统选择(Windows 11 Pro+Ubuntu 22.04)以及部署步骤,包括WSL2启用、Linux发行版安装、Python/Node.js/Redis等依赖配置。通过优化.wslconfig文件参数(如内存分

博客 2279

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

NAppGUI geom2d几何库实战:为游戏和应用添加高效的2D碰撞检测

想让自己的游戏角色撞墙反弹、让拖拽的图标在界面上精准"停靠"、让导弹命中目标时触发爆炸?这一切都离不开**2D碰撞检测**。NAppGUI 是一个用纯 ANSI-C 编写的跨平台桌面应用 SDK(支持 Windows、macOS、Linux),它的 **geom2d 几何库**内置了一整套高效、开箱即用的 2D 碰撞检测算法,从点、线段、圆形到多边形,几乎覆盖了游戏与图形应用所需的全部碰撞场景。本

gitblog_00867的博客 721

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

六、计算触点为了动态的移动刚体,我们需要精确计算两个碰撞多边形之间的触点。对于2D来说这并不复杂,但是在3D场景中会变得非常复杂。在2D情况下,可以考虑两种情况,点和边的相交或者是边和边的相交。 这个处理过程几乎不需要教程,但是它非常适合于一个可视化的演示

NETTE DE BLOG 2975

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

 五、处理旋转在许多游戏中都可以发现一些旋转的物体。与它们的碰撞会有一点复杂。旋转精灵的标准做法是通过一个简单的角度,通常的区间是[0,2*PI]。可以使用矩阵来存贮三角操作,因此一个角度可以被转化为2*2的矩阵 一个简单的处理旋转物体碰撞的方法是保存一个原始多边形的副本,并将其转化到当前位置和角度。这是非常简单的,因此我决定详细描述并给出一个通用的碰撞检测系统,这个系统同样可以用

NETTE DE BLOG 2934
上一篇: 基于2D多边形的碰撞检测和响应(三)
下一篇: 基于2D多边形的碰撞检测和响应(五)
nette
博客等级 码龄20年 61粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值