看来还是整体的数据结构有问题,一些个极限的问题是无法解决的。
Flash( )
这次加入了两个多边形之间的碰撞冲量的计算,首先需要知道的是他们的碰撞点和碰撞的面,这里我没有修改以前的冲量的计算方法。但是似乎问题不是很大,问题还是有的,就是多变形没有办法来停止,这我怀疑和整体的结构有关系,看来需要重新来写了。
点击鼠标可以看到一些效果,但是需要说明的是这个例子是没有碰撞的检测的,因此如果出现了两个点碰撞的情况就会出问题,因此我在这里做了一些限制。
最近的一段时间一直都在学习物理引擎的知识,今天终于有所得了,这是一个最基本的例子。
偶得了一个紫砂壶,我不懂收藏,现在把它的图片发上来,大家帮忙给鉴定一下是真的吗?
这个问题在5d的论坛上问了,结果是石沉大海。只好是发在这里。
http://veteran.5dblog.com
操作方法:鼠标点击的位置和小圆的距离就是小圆的速度,他和多边形的边缘的碰撞点为红色的十字位置。实际上如果判断两个多边性的话要更复杂一些。
多边形的碰撞点可能有多个,这里只能监测到2个
操作方式:靠近其中的一个顶点,按鼠标的左键或者是按UP键
推荐给大家一个网站,一个专门讲2D的多边形碰撞的。源文件在打包的文件中。有兴趣的朋友可以下载来看看。很不错的资料。
碰撞的形式有很多种,方法也有很多种,这里我检测的是圆形和直线的碰撞。
两点可以确定一条直线,这里我们给出一些点来绘制一个不规则的线框,如图所示:
我们需要计算一下圆形的中心到直线的距离Dis,如果小于圆形的半径R,就可以知道他们已经碰撞了。
要像得到他们的距离Dis,必须知道两个点,即圆心的坐标和经过圆心的和已知直线L相垂直的直线L'的交点的坐标P。
根据直线方程y=k*x+b,我们只需要计算出k和b的值就可以确定这条经过圆心的直线L'。
因为和L垂直,我们可以计算出L'k=-(1/Lk)。根据直线L的已知两点,我们先计算出Lk=(y2-y1)/(x2-x1),x1,y1,x2,y2是已知的两点的坐标。
因此我们知道了L'k=-(x2-x1)/(y2-y1)。知道了L'k,接下来计算一下L'b,因为圆心的坐标是已知的,将其代入到y=kx+b,可以计算出L'b=y-kx;
我们最终确定了这条直线L',但是最终的目标是计算L'和L的交点,对L'和L的两个直线方程解方程组。最终我们得到了交点的坐标P。
看一下效果:(拖动圆靠近直线)