关于射线与碰撞体的碰撞

请教一下各位大佬,如果一条射线去做碰撞反弹,如果碰到一条边上比较好理解,就是把这条边当作反弹边去做反弹。

但如果打到了一个方形碰撞器的顶点区域应该作何操作呢?另外,假如是若干个方形碰撞器拼成的棋盘,那射线打到了每个格子的顶点上,有没有好一点的解决方案呢?老板让自己去实现碰撞器,被这些极限情况头都搞秃了。

求大佬们救救我

不能用物理引擎吗?要完全自己实现还有各种形状的碰撞器怕是比较难

形状其实也就只有几种特别简单特别规则的类型
矩形,三角形,以及矩形切掉四个角的八边形。所以才敢应了老板的话,说自己做一套物理系统出来(主要也是因为物理系统对于我们这个游戏来说其实太冗余了,很多东西很多判断都是多余的,性能会比较差)

运动逻辑,碰撞反弹,其实我已经都做好了(毕竟真不难。。。)
但是对于上述的一些极限情况,我没有一个比较好的统一算法

那应该参考光的球面反射把

球面反射反而简单了,去交点的切线作为反射面。
但现在的问题是一个不可导,或者说不存在切线的顶点这个反射面怎么定。而且,由于碰撞体是按照棋盘那样紧贴的方式去排的,所以顶点是会存在位置相同的情况。

在这个大前提下,如何去处理顶点的碰撞比较好。

目前我是分情况来讨论的,但是代码真的好多,(写了三四百行代码,除了自己别人是不会愿意去看的。)所以想看有没有比较优化的,或者说符合行业标杆的做法,最起码能让别人愿意去读去维护。

这个顶点为什么会不存在切线呢?你的碰撞一定是撞到一个已知物体的顶点啊,以这个物体做外切圆,通过中线点连线不就求出了切线吗

这。。。关于切线的定义你可能要翻一下书了。。。按照你的意思,正方形和矩形的顶点的切线还会是不一样的吗,也就是说一个直角的切线(我们假设存在)会对应多个值?

除非是简单的矩形,圆这种,矩形不带旋转,否则自己实现,劝你还是老老实实卖炒饭去吧 :rofl:

1赞

image 我的理解是这样的

图形某一个点的切线,用比较不规范的说法来描述,就是从左和从右分别选择两个无穷接近这个点的点,然后连线得到的直线。

这就意味着这个图形需要处处可导。所以对于多边形这种的顶点,顶点处是没有数学意义上的切线的。

另外,假设按照你的想法来。有至少两个问题需要解决的。
1.对于超过4条边的多边形,并非所有的顶点都会在外切圆上。
2.如果射线是从你图中“反射面”的内部,图形的外部发射过去,那你这里的算法,得到的反弹后的射线又是怎样的呢?

其实碰撞器非常简单,目前就值考虑正方形。
但因为瞄准线是一条线,没有面积,这就意味着会出现,线碰到了矩形顶点的情况。
这种情况的反弹结果怎么去算。

而因为是棋盘这种布局,就意味着对于一个2x2的区域,也就是个“田”形的区域,田最中间的这个顶点可能是4个碰撞器都的公用顶点(碰撞器是可能不存在碰撞的反弹的)

你试试这个呢,我现在用它实现了多种异形砖块以及动态旋转移动的碰撞计算。 https://github.com/nicolas-dutertry/balljs