Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 接触函数的数值分析-表示形状的最有效和最简单的方法_Python_C++_Geometry_Linear Algebra_Numeric - Fatal编程技术网

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

Python 接触函数的数值分析-表示形状的最有效和最简单的方法,python,c++,geometry,linear-algebra,numeric,Python,C++,Geometry,Linear Algebra,Numeric,我正在做一个小作业,正如标题所示,这是关于接触函数的数值分析,更具体地说,我在寻找两个不同形状内的两点之间的最近距离,以便这些形状进行接触(它们相切) 我知道它不是100%准确 我想知道如何才能以最好、最统一的方式来表示不同的形状,使该算法能够工作。形状主要是凸面和凹面多边形和/或不同种类的曲线 我的主要想法是使用某种样条线:B样条线,或NURB,然后我可以插值它并创建一个多边形 然后是碰撞检测的问题,对于我使用的凸集, 但是如何处理凹多边形和曲线,我不知道 我用C++17和SFML2写这篇文章

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

我知道它不是100%准确

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

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

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


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

多边形存储:您做您认为最好的事情。就我个人而言,我见过很多冲突库,其中包含供最终用户处理的多边形对象,它们大多存储为逆时针点数组:{{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,选择的解决方案是将它们分解为一组凸多边形。有很多算法,但多边形三角剖分是你最好的选择,我想。它留下了最简单的形状,有几种经过验证的算法来实现它

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


希望我有所帮助:)

您的草图示例似乎不符合“两个不同形状内的两点之间的最近距离”。