接触函数的数值分析表示形状的最有效和最简单的方法

2024-09-27 21:23:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个小作业,正如标题所示,这是关于接触函数的数值分析,更具体地说,我在寻找两个不同形状内的两点之间的最近距离,以便这些形状进行接触(它们相切)

A little picture for better understanding of the problem.我知道这不是100%准确

我想知道如何才能以最好、最统一的方式来表示不同的形状,使该算法能够工作。形状主要是凸面和凹面多边形和/或不同种类的曲线

我的主要想法是使用某种样条线:B样条线,或NURB,然后我可以插值它并创建一个多边形

然后是碰撞检测的问题,对于凸集,我使用Separating Axis Theorem, 但是如何处理凹多边形和曲线,我不知道

我用C++17和SFML2写这篇文章,没有其他第三方LIB(目前,如果有任何可以帮助我的,请在您的评论中链接它们)


Tags: 函数算法距离标题作业方式多边形曲线
1条回答
网友
1楼 · 发布于 2024-09-27 21:23:19

多边形存储:你做你认为最好的事情。就我个人而言,我见过很多冲突库,其中包含供最终用户处理的多边形对象,它们大多存储为逆时针点数组:{{x1,y1},{x2,y2}}或{x1,y1,x2,y2}。碰撞系统负责计算法向量

我个人喜欢将它们存储为ccw边:{{x1,y1,dx1,dy1},{x2,y2,dx2,dy2}},其中x1+dx1=x2和y1+dy1=y2。法线的计算公式为{-dy,dx}

对于凹多边形和SAT,选择的解决方案是将它们分解为一组凸多边形。有很多算法,但多边形三角剖分是你最好的选择,我想。它留下了最简单的形状,有几种经过验证的算法来实现它

对于曲线,这里有一个很好的answer。用几个简单多边形进行像素级的完美碰撞就足够了(如果您对它感到满意的话),但分解成分辨率很高的顶点并不是一个坏的选择(而且它也适用于SAT!)

希望我能帮忙:)

相关问题 更多 >

    热门问题