采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
首先第一个要解决的就是怎么判断球体有没有发生了碰撞,现在我在这里难住了, 根据我们已知的条件 (1)所有小球的数组, (2)每个小球的半径, (3)每个小球的圆心坐标, 我们要根据这三个条件来判断小球是否发生了碰撞,因为圆跟圆的碰撞,碰撞点可能是圆周上的任意一点,所以根据坐标点计算,好像是不太行了,有没有哪位同学知道比较好点的办法,分享一下。谢谢了
其实这个问题我本来计划单独拿出一章进行介绍的,但是最后由于时间原因,没有作介绍。
简单来说,你给出的条件落了一个非常重要的条件,我们还知道每一个小球的速度(方向和大小)。所以,每两个小球之间发生碰撞(如果发生的话)的位置是可以计算的:)
但即使加上这个条件,完成这个任务依然不容易。需要一定的物理知识。与此同时,这个问题有很多优化方案,可以深度结合数据结构的使用。如果感兴趣的话,可以查询一下和“碰撞检测”这个领域相关的资料:)
刘老师,我也在网上搜了,但是没有好的资料,你能给我贴出几个相关网址吗?多谢了。。
随手搜了一个:http://ericleong.me/research/circle-circle/ 我没有特别仔细看,他也没有动态的最终效果,所以我不确定他的效果如何。但是可以以这个为起点,哪里发现他的实现不够好,或者和你想实现的有出入,或者想更深入去学习,继续去深挖。有时间的话我也会为这个课程补充一个这个问题的相关代码的:)加油!
谢谢老师,我看了资料用了一个比较简单的方法实现了 /** * 判断两圆是否发生碰撞. * 如果两圆的圆心距小于等于两圆的半径之和则判断为碰撞 * @param circles */ private void circleCollision(Circle[] circles){ int n = circles.length; for (int i = 0;i<n;i++) { if(circles[i].x!=x&&circles[i].y!=y){ Double s = centerDistance(new Point(x, y), new Point(circles[i].x, circles[i].y)); if(s<=2*r){ vx=-vx; vy=-vy; } } } } /** * 两坐标点之间的距离 * @param p1 第一个点的坐标 * @param p2 第二个点的坐标 * @return */ private Double centerDistance(Point p1,Point p2){ //x和y平方和的二次方根 return Math.hypot((p2.x)-(p1.x),(p2.y)-(p1.y)); } :)加油!
登录后可查看更多问答,登录/注册
课程重应用、重实践、重思维,真正应用于实际工作开发中
2.7k 1
871 6
770 5
880 5
878 5