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

lnming 2009-07-29 09:44:10
加精
两小球围绕大球做大圆匀速运动,自始至终,小球球心与大球球心距离都是10,小球半径是1,球1沿着赤道运动,速度为1,初始位置在(0,10,0)位置,但运动方向未知从东半球开始还是西半球开始,球2沿着90度经线圈,速度为2,初始位置北极极点(0,0,10),运动方向亦是未知从东半球还是西半球开始。
问:1、这两球会相撞吗?
2、如果相撞,他们成立的条件是什么?各个运动方向要经过多少时间?他们的相撞一刹那坐标是多少?
...全文
2970 102 打赏 收藏 转发到动态 举报
写回复
用AI写文章
102 条回复
切换为时间正序
请发表友善的回复…
发表回复
dj2437 2010-03-13
  • 打赏
  • 举报
回复
标记下先晚上看
yttyhf2006 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 wzcgeorge_0907 的回复:]
转的角度没有告诉呀,
小球1好说,绕着赤道
小球2是绕着本初子午线吗?如果是的话就不会相撞吧,如果不是的话就有可能了
[/Quote]

这个应该是正解吧
ruoshui_sanqian 2010-01-18
  • 打赏
  • 举报
回复
假设是球1跑一周需要40,由此可知球2跑一周需要20,
因此球1跑到(0,10,0),(0,-10,0)的时间应该是0,20,40,60,80......{y=20*(n-1)}(n为整数)
球2跑到(0,10,0),(0,-10,0)的时间应该是5,15,25,35,45......{y=5+(n-1)*10}(n为整数)
当20*(n-1)=5+(n-1)*10时,得到n等于1.5,所以不满足 (n为整数),故不能相撞
lichy163 2009-08-17
  • 打赏
  • 举报
回复
别想的那么复杂,纯物理计算题啊,先设沿赤道运动的球的起始点是D点,设置一个坐标参数(未知数),列出运动方程(建议角速度计算),再列出另一个球的运动方程,两个球相遇的话一定是在赤道的,你就去计算不就好了嘛。
lnming 2009-08-09
  • 打赏
  • 举报
回复
没有更多的提示啦?
noove_001 2009-08-06
  • 打赏
  • 举报
回复
package test;

import java.text.DecimalFormat;

public class Ball {
private static final double pi = Math.PI;
private static final double CR = 10; //大球半径


private double plansAngle;//两球轨迹平面所成角度
private double startPoint;//起始位置的角度
private int speed;
private int forward;//顺时针-1,逆时针1

public Ball(double plansAngle,double startPoint,int speed,int forward){
this.plansAngle = plansAngle;
this.startPoint = startPoint;
this.speed = speed;
this.forward = forward;
}
//获取坐标
public double[] getPoint(long timenum){
DecimalFormat mydf = new DecimalFormat("#0.00");
double[] point = new double[3];
double nowPoint = startPoint+(forward*speed*timenum)/CR;//现在位置角度
point[0] = Double.parseDouble(mydf.format(CR*Math.cos(nowPoint)*Math.cos(plansAngle)));
point[1] = Double.parseDouble(mydf.format(CR*Math.sin(nowPoint)));
point[2] = Double.parseDouble(mydf.format(CR*Math.cos(nowPoint)*Math.sin(plansAngle)));
return point;
}
//获取两点之间距离
public static double getLine(double[] d1,double[] d2){
double l0 = Math.abs(d1[0]-d2[0]);
double l1 = Math.abs(d1[1]-d2[1]);
double l2 = Math.abs(d1[2]-d2[2]);
return Math.sqrt(l0*l0+l1*l1+l2*l2);
}
//获取一个循环所用时间
public static int gettimeOneCircle(int num,int speed){
return (int)(2*pi*CR*num/speed)+1;
}

//以慢的小球运动轨迹建立坐标的xy平面,该球初始角度为pi/2;
//快的小球的运动轨迹平面与xy平面所成角度为pi/2;该球起始角度为0;
public static void main(String[] args){
boolean ping = false;
Ball sb = new Ball(0,pi/2,1,1);
Ball bb = new Ball(pi/2,0,2,1);
//获取一个循环的时间,即慢的球走一圈,快的球走两圈,正好回到原来位置
int maxtime = gettimeOneCircle(1,1);
for(int i=0;i<maxtime;i++){
double[] d1 = sb.getPoint(i);
double[] d2 = bb.getPoint(i);
double rd = getLine(d1, d2);
if(rd<=2){
System.out.println(i+"秒相撞,距离"+rd);
System.out.println("sb"+d1[0]+"-"+d1[1]+"-"+d1[2]);
System.out.println("bb"+d2[0]+"-"+d2[1]+"-"+d2[2]);
ping = true;
break;
}
if(i%86400==0)
System.out.println(i/86400+"天未相撞");
}
if(!ping)
System.out.println("不会相撞");
}

}
zhoujk 2009-08-05
  • 打赏
  • 举报
回复
[Quote=引用 93 楼 kinsan 的回复:]
画了一张图  这里好像不能发图片
http://www.xiaochuncnjp.com/bbs/viewthread.php?tid=922016&extra=page%3D1

看图就会有思路了。。。

球1,2 在转第一圈的时候绝对不会碰撞, 但是感觉在n圈之后就有可能碰撞。。。 因为第一圈之后 两个球产生了时间差。。。  有空的时候模拟一下
[/Quote]
应该不会,找到两个球分别绕行一周的时间的最大公约数。如果在这个时间内还不能相撞,则永远不会相撞。
taick 2009-08-05
  • 打赏
  • 举报
回复
taick 2009-08-05
  • 打赏
  • 举报
回复
假设两个球为两个点,那么即会产生两个圆的平面,两个平面的交点就是可能相撞的坐标.但由于这两个球是有体积的,因此相撞的坐标会在两个圆里产生.
不知道怎么说,也不会算,只能凭想像.
lnming 2009-08-03
  • 打赏
  • 举报
回复
谢谢那么多位,根据你们的提示,我已经列出了方程,现在的问题是如何解方程了
  • 打赏
  • 举报
回复
画了一张图 这里好像不能发图片
http://www.xiaochuncnjp.com/bbs/viewthread.php?tid=922016&extra=page%3D1

看图就会有思路了。。。

球1,2 在转第一圈的时候绝对不会碰撞, 但是感觉在n圈之后就有可能碰撞。。。 因为第一圈之后 两个球产生了时间差。。。 有空的时候模拟一下
越过越咸 2009-08-02
  • 打赏
  • 举报
回复
192.168.1.100
bzpengyukun 2009-08-02
  • 打赏
  • 举报
回复
理科没学好
Joey_zy 2009-08-02
  • 打赏
  • 举报
回复
这样的题目搞死人啊!不光要物理好,地理也不能差啊!不会!!!纯物理的还懂点!
iCan.club 2009-08-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 paulpeath 的回复:]
两小球围绕大球做大圆匀速运动,自始至终,小球球心与大球球心距离都是10,小球半径是1,球1沿着赤道运动,速度为1,初始位置在(0,10,0)位置,但运动方向未知从东半球开始还是西半球开始,球2沿着90度经线圈,速度为2,初始位置北极极点(0,0,10),运动方向亦是未知从东半球还是西半球开始。
1、不会相撞。
2、理由:两运行轨迹的交点是(0,10,0),(0,-10,0).相撞问题转化为两球运行到这两点的时间重合即相撞,
容易计算球1在两点的等差时间序列分别为0、20、40、。。。。和10、30、50、。。。。,
球2在两点的等差时间序列分别为2.5、12.5、22.5、。。。。和7.5、17.7、27.5、。。。。,
显然没有相撞点.


[/Quote]
这个解法通俗易懂,呵呵,我喜欢
jupiterhunter 2009-08-01
  • 打赏
  • 举报
回复
数学,数学,数学!!!
wingcle5k 2009-08-01
  • 打赏
  • 举报
回复
两小球都是匀速的
每次环大球一圈的位置都固定
应该不会相交
!!!!!
让爱延续 2009-08-01
  • 打赏
  • 举报
回复
本身环境就三维旋转,再加上旋律体又是球体,不是点的哦,相互交融后好像就不能安照平面的情况去计算的了。程度相当有深度,找个数学专家吧。
lnming 2009-08-01
  • 打赏
  • 举报
回复
因为与速度有关,所以不可能用循环,要用数学知识,循环太费时间了。
lnming 2009-08-01
  • 打赏
  • 举报
回复
[Quote=引用 79 楼 noove_001 的回复:]
我觉得出题的本意不是让你马上给出答案,而是给出一个解决问题的思路;
首先定义一个小球的对象Ball,实现一个获取坐标的方法getPoint(int speed,int timenum),然后每秒循环计算两个小球的坐标之间的距离是否会小于2就行了,至于方法怎么实现那就要数学功底,这也是数学问什么重要的原因吧;
然后结果是否会碰撞和时间都不是你要考虑的,那是计算机的事;
[/Quote]
说出我的心声了,我需要的就是思路与证明过程,现在为何是用赤道与90度经线来做呢,是因为大家容易理解,实际的情况,是知道运动轨迹,但是要用最快的速度计算出是否会碰撞,如果会碰撞,那碰撞时两小球的坐标。所以,小球的位置不一定在以上的两个轨迹,可能在其他的轨迹上。
加载更多回复(81)

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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