`
lvmlvy_1983
  • 浏览: 30502 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

两球碰撞的计算,有兴趣的来看看

    博客分类:
  • java
 
阅读更多
问题:
两小球围绕大球做大圆匀速运动,自始至终,小球球心与大球球心距离都是10,小球半径是1,球1沿着赤道运动,速度为1,初始位置在(0,10,0)位置,但运动方向未知从东半球开始还是西半球开始,球2沿着90度经线圈,速度为2,初始位置北极极点(0,0,10),运动方向亦是未知从东半球还是西半球开始。
问:1、这两球会相撞吗?
2、如果相撞,他们成立的条件是什么?各个运动方向要经过多少时间?他们的相撞一刹那坐标是多少?

我的解答:
根据题目的要求,两球肯定不会相撞;
但是由题目引申下去,两个球的速度不固定的情况该如何解决?其实只要建立坐标轴,知道坐标,然后计算两个坐标点的距离是不是小于两球半径之和就可以了;
这涉及到立体几何的知识,我觉得可以以两球运动轨迹的交点所在的直线为y轴,以慢的小球的所在的平面为xy平面建立坐标轴;

以下是用java实现的代码(如果高手看见,希望能够提点意见,包括编码规范等,先谢了):
1.package test;   
2.  
3.import java.text.DecimalFormat;   
4.  
5.public class Ball {   
6.    private static final double pi = Math.PI;   
7.    private static final double CR = 10; //大球半径   
8.       
9.  
10.    private double plansAngle;//轨迹平面与xy平面所成角度   
11.    private double startPoint;//起始位置的角度   
12.    private int speed;   
13.    private int forward;//顺时针-1,逆时针1   
14.       
15.    public Ball(double plansAngle,double startPoint,int speed,int forward){   
16.        this.plansAngle = plansAngle;   
17.        this.startPoint = startPoint;   
18.        this.speed = speed;   
19.        this.forward = forward;   
20.    }   
21.    //获取坐标   
22.    public double[] getPoint(long timenum){   
23.        DecimalFormat mydf = new DecimalFormat("#0.00");   
24.        double[] point = new double[3];   
25.        double nowPoint = startPoint+(forward*speed*timenum)/CR;//现在位置角度   
26.        point[0] = Double.parseDouble(mydf.format(CR*Math.cos(nowPoint)*Math.cos(plansAngle)));   
27.        point[1] = Double.parseDouble(mydf.format(CR*Math.sin(nowPoint)));   
28.        point[2] = Double.parseDouble(mydf.format(CR*Math.cos(nowPoint)*Math.sin(plansAngle)));   
29.        return point;   
30.    }   
31.    //获取两点之间距离   
32.    public static double getLine(double[] d1,double[] d2){   
33.        double l0 = Math.abs(d1[0]-d2[0]);   
34.        double l1 = Math.abs(d1[1]-d2[1]);   
35.        double l2 = Math.abs(d1[2]-d2[2]);   
36.        return Math.sqrt(l0*l0+l1*l1+l2*l2);   
37.    }   
38.    //获取一个循环所用时间   
39.    public static int gettimeOneCircle(int num,int speed){   
40.        return (int)(2*pi*CR*num/speed)+1;   
41.    }   
42.       
43.    //以慢的小球运动轨迹建立坐标的xy平面,该球初始角度为pi/2;   
44.    //快的小球的运动轨迹平面与xy平面所成角度为pi/2;该球起始角度为0;   
45.    public static void main(String[] args){   
46.        boolean ping = false;   
47.        Ball sb = new Ball(0,pi/2,1,1);   
48.        Ball bb = new Ball(pi/2,0,2,1);   
49.        //获取一个循环的时间,即慢的球走一圈,快的球走两圈,正好回到原来位置   
50.        int maxtime = gettimeOneCircle(1,1);   
51.        for(int i=0;i<maxtime;i++){   
52.            double[] d1 = sb.getPoint(i);   
53.            double[] d2 = bb.getPoint(i);   
54.            double rd = getLine(d1, d2);   
55.            if(rd<=2){   
56.                System.out.println(i+"秒相撞,距离"+rd);   
57.                System.out.println("sb"+d1[0]+"-"+d1[1]+"-"+d1[2]);   
58.                System.out.println("bb"+d2[0]+"-"+d2[1]+"-"+d2[2]);   
59.                ping = true;   
60.                break;   
61.            }   
62.            if(i%86400==0)   
63.                System.out.println(i/86400+"天未相撞");   
64.        }   
65.        if(!ping)   
66.            System.out.println("不会相撞");   
67.    }   
68.       
69.} 
分享到:
评论

相关推荐

    游戏代码有兴趣的同学可以看看

    标题“游戏代码有兴趣的同学可以看看”和描述“这是一个手机游戏很多做这个的可以看看它里面的方法还有思想很精辟”暗示了我们即将探讨的是一份手机游戏的源代码,其中包含了丰富的编程技巧和设计思维。 手机游戏源...

    JS(贪吃蛇和台球)两款游戏打包

    "感兴趣的朋友可以下载来研究下"鼓励对游戏开发感兴趣的用户下载并深入研究代码结构和逻辑。 【标签】"JS(贪吃蛇和台球)两款游戏打包"进一步确认了压缩包的主要内容,同时也可能暗示了这两个项目可能是由同一...

    联众台球助手 V0.6 源代码

    3. **游戏逻辑实现**:台球运动的物理模拟,如碰撞检测、球的运动轨迹计算。 4. **数据结构与算法**:可能用到链表、数组、栈等数据结构,以及搜索、排序等算法来处理游戏状态。 5. **网络编程**:如果程序能与联众...

    计算能力强大的象棋奇兵

    总的来说,"计算能力强大的象棋奇兵"是计算能力、人工智能与传统游戏文化的一次完美碰撞。它不仅展示了计算机的强大,也让我们看到了科技如何改变娱乐方式,提升生活品质。无论是对于象棋爱好者还是对计算机科学感...

    HTML5 Canvas实现的人物四肢模拟及身体碰撞动画效果源码.zip

    这个压缩包“HTML5 Canvas实现的人物四肢模拟及身体碰撞动画效果源码.zip”显然是一个示例项目,用于展示如何...这对于提升前端开发技能,尤其是对动态图形和游戏开发感兴趣的开发者来说,是一个非常有价值的实践案例。

    易语言躲避球游戏源码.zip易语言项目例子源码下载

    躲避球游戏通常包括玩家控制、球的物理运动、碰撞检测、得分计算等核心模块。在源码中,我们可以看到易语言如何实现这些功能,例如如何定义变量来存储玩家的位置和速度,如何编写函数来模拟球的抛物线运动,以及如何...

    Pool Game using JavaScript with Free Source Code.zip

    这个项目涵盖了JavaScript基础、Canvas绘图、物理模拟、游戏逻辑实现、用户交互等多个方面,对于想要提升JavaScript编程技能或者对游戏开发感兴趣的人来说,是一个非常有价值的资源。通过研究和学习这个项目,开发者...

    Balls(撞球小游戏,附源代码)

    开发者可能会使用Timer控件来定期刷新画面,使得小球的运动看起来流畅自然。 再者,游戏逻辑的实现离不开物理知识的应用。在这个撞球游戏中,碰撞检测和物理模拟至关重要。开发者需要精确计算小球与边界、其他小球...

    弹球小游戏java实现.zip

    首先,让我们来看看这个游戏的基本结构。"BounceBall-Java-master"是项目的主要代码库,通常这是一个Git仓库的名字,表明这个项目遵循了版本控制的良好实践。在Java游戏中,主要的逻辑通常被组织在多个类中,包括...

    一些小游戏源代码,喜欢的可以有看看

    这些压缩包文件包含了一些经典的小游戏的源代码,适合对编程和游戏开发感兴趣的朋友们学习研究。下面我们将逐一探讨这些源代码可能涉及的知识点。 1. 智能象棋游戏与智能象棋游戏(V2): 这两款游戏可能是基于中国...

    HTML5实现的保护热气球小游戏源码.zip

    文件“使用须知.txt”很可能包含了关于如何运行和修改这个游戏源代码的指导信息,这对于开发者或者想要学习HTML5游戏开发的人来说是非常有价值的。它可能涵盖了如何设置开发环境、如何查看和理解代码结构、如何调试...

    vb写的打砖块小游戏

    首先,我们来看一下VB的基本结构。VB是一种面向对象的编程语言,它的界面设计主要是通过拖放控件来完成。在这个打砖块游戏中,主要的控件可能包括一个用于显示游戏画面的PictureBox控件,一个表示挡板的Shape控件,...

    scratch编程项目源代码文件案例素材-山地足球.zip

    在解压并打开“山地足球.sb3”文件后,我们可以逐个分析每个角色的脚本,看看它们是如何协作来实现游戏的各个功能的。例如,可能会有一个主控制器角色用于处理游戏的开始、暂停和结束,还有球员角色的脚本,它们根据...

    MATLAB在大学物理教学中的应用实例.pdf

    首先,我们来看看标题和描述中提到的“MATLAB数据处理”。MATLAB是美国MathWorks公司发布的一款高性能的数值计算软件,它广泛应用于工程计算、数据分析、算法开发和仿真等领域。在教学过程中,通过使用MATLAB的数据...

    2D 45度斜角地图原理

    本主题将深入探讨2D 45度斜角地图的原理,这对于那些对游戏编程感兴趣,尤其是使用ActionScript 3.0(AS3.0)进行开发的人来说非常有价值。ActionScript 3.0是Flash平台上的一种强大的编程语言,常用于创建互动内容...

    四年级数学上册2两三位数除以两位数2.1简单的周期教学反思素材苏教版

    然而,从描述来看,学生可能过于依赖教材,缺乏自主探索和创新思维。教师需要引导他们培养独立思考的习惯,鼓励他们在预习时尝试不同的解题方法,而不只是机械地遵循课本。 其次,课堂交流是促进学生思维碰撞和深化...

    scratch编程项目源代码文件案例素材-星球陷阱.zip

    游戏中的角色之间可以通过发送消息来交互,例如,主角可以向障碍物发送消息来触发碰撞响应。 5. **变量与数据**:在《星球陷阱》中,可能需要记录分数、生命值等信息,这就需要用到变量。变量可以存储并改变数据,...

    游戏编程数学和物理基础(下)

    书中建议,对微积分有兴趣进一步研究的读者,可以参考附录B中提供的资料。 整体来看,本章内容通过具体的实例和图形演示,循序渐进地介绍了如何使用微积分的方法来计算和分析一维空间内的物体运动。这对于游戏...

    两个贪吃蛇.zip易语言项目例子源码下载

    总的来说,“两个贪吃蛇.zip”易语言项目例子提供了丰富的学习素材,无论你是易语言的初学者,还是有一定经验的开发者,都可以从中获取宝贵的经验,进一步提升你的编程水平。记得动手实践,将理论知识转化为实际操作...

    基于MD5编写的测试程序

    描述中的“很有用处的,有兴趣的朋友可以看看”意味着这个测试程序对于学习MD5、验证MD5实现或者在实际应用中检测数据完整性可能非常有价值。对于开发者来说,理解如何使用MD5进行数据校验是至关重要的,尤其是在...

Global site tag (gtag.js) - Google Analytics