求助,限制一个圆在多边形内移动

已知一个圆,和一些围成一个多边形的点,需要限制这个圆必须在多边形内移动,有实现过类似功能或者有实现思路的吗?围成矩形限制移动很简单,但是不规则多边形中,计算出来的位置偶尔会飞得很远。

如果点是固定的话,可以把多边形分区试试?

条件:循环所有的点,到圆心的距离都小于半径?

圆形半径确定的话,可以先预生成一个圆心可移动的多边形范围,然后就判定点在多边形里就可以了。

点是否在多边形内我可以判断,现在就是卡在了,当前帧的位置有效,但是下一帧的位置与两条边相交了,怎么将位置修改到于相交的边相切或者不相交。

单按照算法来处理的话可以找凸包与圆的题来解,以前acm集训好像看过
工业上快速出效果的还是直接用物理引擎吧

物理引擎确实可以解决,但是只有静态刚体才能设置坐标移动,圆形必须跟随手指移动,用线性速度的话不好控制,也不方便瞬间设置位置。

你这里都说了当前帧有效,下一帧无效。 那是不是应该先把下一帧要到达的位置先做一个检测,看是否超出了多边形,超出了就不把位置赋值给圆呢。看你下面说的应该是手指控制圆在多边形内移动,那只需要每帧检查下手指的坐标是否超过了多边形范围再去赋值给圆。 另外,如果多边形不好计算范围的话,可以拆分成n个三角形。

下一帧超了但是圆不能不动,比如一帧移动10像素会超出,移动6像素就不会,要找出适合的移动距离。

那也是可以算出来的,两条直线的交叉点就是圆能达到的最大位置

不是,要考虑圆的半径呀。

有当前帧 跟下一帧之分吗? 不管是那一帧 , 应该都是先根据你的算法算出来合不合理才会改变圆的位置吧? 位置计算不符合条件(即出界了),那就根据实际业务走其他分支,如何合理就移动过去。这样做是不是就不存在会不会卡住的问题了。

这需求听起来像是桌球移动母球

是的,同类型游戏,兄弟实现过吗?我现在算出了安全区域,但是将安全区域外的坐标转到安全区内还有问题。

将线段内缩一个半径, 线段间的顶点改为圆.
就可以将圆与线段碰撞的问题, 转化为 点与(线段或圆)碰撞.

目前确实是将线段内缩了一个半径,不过点与线段的碰撞算起来也很麻烦,要算线段的交点。不过目前搞出来的东西也能接受了。

用射线检测,在多边形内取一个中心点,每次移动都判断圆是否还在多边形内,不在则从中心点向触摸点做射线检测求射线与多边形的交点,将这个点作为圆与多边形的切点进而确定圆的位置

解决方案,根据圆的半径,将多边形的每条边平移,围成的新的多边形就是圆的安全移动范围

,移动时判断点是否在范围内,如果不在,则根据圆的当前位置与目标位置形成的线段与安全范围某条边的交点作为目标位置。

3赞