送分

Kevin_qing 2012-03-08 04:44:05
简化为2d平面来讨论

Vec2 s,e,l1,l2;
float r;
设圆形半径为r,沿s->e线段匀速移动

现在需检测园与线段l1->l2是否相交,以及相交时间点t(0-1)。


...全文
120 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kevin_qing 2012-03-12
  • 打赏
  • 举报
回复
1是计算圆和直线相交时间,投影此时圆心到直线,只用算第一次碰撞,穿透后的第二次相交忽略掉。
Kevin_qing 2012-03-11
  • 打赏
  • 举报
回复
上面解法有错。

新算法如下。

1.投影圆心至直线

2.计算投影点是否在l1,l2之间,在的话用点到直线距离==r计算碰撞点,时间

3.如果投影点不在l1/l2之间,计算其与l1,l2距离。
取d=距离较小的一个,判断d和r大小。

4.如果d<=r,点到点距离==r 计算碰撞时间,碰撞点


算法思路。
圆围绕线段移动一圈,圆心轨迹是一个胶囊体。

因此实际问题等同于点和胶囊相交判断。(2个圆+一个方块)


此算法可对任意形状多边形作碰撞检测(n条线段构成封闭图形,此时可以优化掉背面方向的检测)。


扩充至3d则是球/面
等价于点与平面+胶囊体边界检测

Kevin_qing 2012-03-08
  • 打赏
  • 举报
回复
5改为直接求T,t<0,直接求s和l1 l2距离,t>1 说明不相交

不用第6步了

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧