首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在2D中预测船与物体的影响范围之间的相遇

如何在2D中预测船与物体的影响范围之间的相遇
EN

Stack Overflow用户
提问于 2013-02-22 17:05:42
回答 3查看 1.1K关注 0票数 17

长时间的听众,第一次打电话的人。我正在用XNA做一个业余爱好游戏,它是关于太空中的运输船,类似于海上的集装箱船。我需要能够在受限的2D环境中预测船与行星/卫星gravitational sphere of influence之间的相遇。船和行星/月球(简称天体)的时间位置是由keplerian orbital elements确定的。船和船身都围绕着同一个引力中心运行。

到目前为止,我设计的方法是首先对远心点和近心点(离吸引中心最远和最近的点)进行一些初步检查,看看是否有可能相遇。在像这样的检查之间,如果飞船的轨道是开放的(双曲线,我将抛物线的情况近似为双曲线),它可以排除许多不可能相遇的情况。

如果这些检查确定相遇是可能的,我就确定船有资格相遇的最小和最大距离。然后,我得到了船舶轨道与由该最小值和最大值定义的两个圆的交点。这会在飞船的轨道上产生零个、两个或四个点,定义可能与物体球体相遇的零个、一个或两个周期。在这一点上,如果有零个交叉点,则可能整个船舶轨道都在相遇区域,这可能是一个不常见的极端情况,但需要覆盖。

我可以得到飞船通过轨道上这些点的时间,给出一到两个时间窗口来检查相遇,但从那里我最好的解决方案是搜索时间跨度,将其分成几个步骤,计算身体在这些时间段的位置,然后测试相遇。

这种方法的问题是知道大小,以便有效地找到相遇的步骤。在时间上获得身体的位置有点昂贵,所以我宁愿尽可能少地做,但步数太大可能会错过相遇的机会。

共焦圆锥形状有什么属性可以帮助缩小搜索空间吗?或者,是否有其他方法来预测有效地沿着圆锥路径移动的点和沿着共享焦点的椭圆移动的圆之间的相遇/碰撞。

EN

回答 3

Stack Overflow用户

发布于 2013-03-14 21:09:11

使用径向碰撞检测(圆),其中一个圆表示行星的重力影响(将大于行星本身),另一个圆代表每艘船,并使每个圆的中心点在距离减小时以一条直线向对方移动。

将每个圆圈的拉力大小应用于每艘船的移动速率。移动只需要简单的trig,cos()表示x,sin()表示y,不需要任何复杂的数学运算。当任意两个物体之间的距离小于其半径之和时,则发生碰撞。

但是当只在所谓的“重力圈”上进行这种形式的碰撞时,当它们碰撞时,你可以在每次迭代中增加少量的船的速度,以模拟重力的拉动。

票数 1
EN

Stack Overflow用户

发布于 2013-03-15 03:48:07

您可以尝试使用通常的毕达哥拉斯距离表达式来构造描述行星和船舶之间的距离(平方)作为时间函数的函数。您正在寻找此函数的零,因此可以应用Newton's method或类似的方法来查找它们。

只要行星的运动速度比飞船慢得多,这种方法就能很好地工作--这样函数就会相对平滑,牛顿的方法就不会有收敛的问题。然而,如果行星的运动速度比飞船快得多,那么这个距离函数就会上下弹跳,就像一个叠加在抛物线状曲线上的“弹簧”,并且可能会多次与x轴相交。牛顿的方法在处理这样的函数时会遇到麻烦,因为导数的方向变化得很快。

希望在构造距离函数时,某些项将被抵消,或者表达式可以以其他方式简化或近似,但如果不是这样,在垂直和水平方向上寻找零可能就足够了。(事实上,您可以选择沿任何轴的距离--例如,行星轨道的长轴。)这两个函数中的任何一个中的零都是冲突的必要条件,但不是充分条件,并且计算起来可能更简单。如果您有一个按时间排序的x方向零的列表,并且y方向的零也是如此,您可以通过列表合并(a la mergesort)计算它们的交集来查找任何真正的碰撞。

票数 1
EN

Stack Overflow用户

发布于 2019-05-26 23:14:55

由于这还没有得到公认的答案,而且我没有看到下面的计算,所以我将添加这些计算,希望它能对某人有所帮助。我还没有想出如何获得约会时间,但我已经想出了如何获得角度。这将得到轨道物体与soi (或船)之间的距离(如果您知道角度):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static double RadiusAtAngle(double angle, double semiLatusRectum, double eccentricity)
{
    return semiLatusRectum / (1 + eccentricity * Math.Cos(angle)); 
}

更重要的是,如果您知道semiLatusRectum和偏心率(这里的半径是从身体到soi边的距离),则翻转该计算可以得到到soi边的角度:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static double AngleAtRadus(double radius, double semiLatusRectum, double eccentricity)
{
    //r = p / (1 + e * cos(θ))
    //1 + e * cos(θ) = p/r
    //((p / r) -1) / e = cos(θ)
    return Math.Acos((semiLatusRectum / radius - 1) / eccentricity);
}

作为参考,可以从semiMajorAxis和semiLatusRectum中找到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static double SemiLatusRectum(double SemiMajorAxis, double eccentricity)
{
    if (eccentricity == 0)//ie a circle 
        return SemiMajorAxis;
    return SemiMajorAxis * (1 - eccentricity * eccentricity);
}

请注意,这些计算也适用于双曲线轨迹。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15029504

复制
相关文章
Maven通过命令创建web项目
mvn archetype:create -DgroupId=com.learn -DartifactId=LearnNew -DarchetypeArtifactId=maven-archetype-webapp
程序新视界
2022/11/30
3180
Maven通过命令创建web项目
在idea中创建web项目_idea部署web项目
这个时候给项目命名,我在这里命名为java_web,下面那个可以更改项目存放的路径,我这里放到自定的路径,点击Finish。
全栈程序员站长
2022/08/02
1.6K0
在idea中创建web项目_idea部署web项目
IDEA 创建Maven Web项目时很慢
最近创建web项目,很慢,还会创建失败,忍不住了,苦思冥想排查原因, 最后,终于找到了,是因为maven 没有选择jdk的原因! 气死我了。
无敌小菜鸟
2020/05/09
8700
对路径“xxxxx”的访问被拒绝。
对路径“D:\\Weixin\\WechatWeb\\wapMxApi\\JsonFile\\WaterPrice.json”的访问被拒绝。
全栈程序员站长
2022/09/20
2.7K0
部署docsify项目时出现无法访问README.md
今天在服务器上部署用docsify编写的文档项目,结果发现首页竟然无法显示,提示404。
用户8851537
2021/08/03
1.9K1
拒绝访问磁盘拒绝访问的恢复办法
当磁盘插入电脑中时,如果示“拒绝访问”的信息时,我们首先需要对磁盘进行目录修复操作。插入待修复的磁盘,打开“我的电脑”,找到磁盘所在的盘符。
用户10127983
2022/10/22
3K0
【Tomcat】Linux上Tomcat发布-JavaWeb项目-访问时不通过项目名
一开始自己不知道怎么直接通过域名访问到自己部署的Web项目,发布在Tomcat上的。 因为自己以前写都是后面加了项目名, 然后去百度谷歌,找到了下面的正确方法
谙忆
2021/01/21
1.2K0
【Tomcat】Linux上Tomcat发布-JavaWeb项目-访问时不通过项目名
从拒绝到被拒绝
2021,新的一轮工作季的开始,你投了太多的简历,太多的邮件,太多的尝试,而到头来收获的却是从拒绝到拒绝。
HoneyMoose
2021/05/13
1.1K0
从拒绝到被拒绝
为什么使用了HTTP代理还是被拒绝访问?
既然某乎为我推荐了这个问题,那今天就来简单说说,使用了HTTP代理后,还是拒绝访问,无非以下原因:
阿秋数据采集
2023/05/19
2.1K0
怎么创建web项目_vs怎么创建项目
WTM — Rapid development framework based on dotnet core
全栈程序员站长
2022/11/03
4.1K0
scrapy拒绝访问
运行成功
红目香薰
2022/11/29
2.8K0
scrapy拒绝访问
maven创建web项目
链接:https://my.oschina.net/960823/blog/870511
斯文的程序
2019/11/07
1K0
maven创建web项目
MySql拒绝访问
昨天用phpMyAdmin修改账号密码后,出现了下图的情况 原来,用phpmyadmin链接mysql数据库,并修改mysql数据库的密码。但修改的方式是直接在表里面进行修改保存。没有用sql语句。
smy
2018/04/03
5.8K0
MySql拒绝访问
github部署项目,在线访问
5,关联github仓库,获取到github仓库地址后,将本地仓库与github仓库关联
用户3055976
2019/12/30
9990
github部署项目,在线访问
flutter项目打包web访问
参考文章:https://dart.cn/null-safety/migration-guide
徐建国
2021/11/30
2.4K0
flutter项目打包web访问
Docker部署web项目
  docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
程序员云帆哥
2022/05/12
1.9K0
Docker部署web项目
服务器要删除文件访问被拒绝,删除文件提示:文件夹访问被拒绝 需要来自administrator权限执行操作…
有时候我们在删除一些系统重要文件,或者被保护的文件的时候,会出现对话框,提示我们您需要来自administrator权限才能对此文件夹进行更改,这是什么原因导致的?今天小编就为大家分析下解决办法。
全栈程序员站长
2022/11/17
6K0
服务器要删除文件访问被拒绝,删除文件提示:文件夹访问被拒绝 需要来自administrator权限执行操作…
电脑拒绝访问_添加本地端口拒绝访问win10
1:linux 服务器默认是不允许 root账号进行远程使用winscp,所以我们需要创建一个新的非root用户进行登录
全栈程序员站长
2022/09/30
2.5K0
电脑拒绝访问_添加本地端口拒绝访问win10
通过Jenkins部署java项目
Jenkins大多数情况下都是用来部署Java项目,Java项目有一个特点是需要编译和打包的,一般情况下编译和打包都是用maven完成,所以系统环境中需要安装maven。
端碗吹水
2020/09/23
1.3K0
通过Jenkins部署java项目
通过域名访问Linux云服务器上的java web项目
当有几个项目需要放在云服务器上,直接在nginx配置文件中创建几个虚拟主机,然后需要解析几个二级域名。这种方法比较容易实现些,把所有的java web项目放到一个Tomcat下实现访问。
兮动人
2021/06/11
10.8K0

相似问题

创建虚拟目录时拒绝访问。

15

在通过jenkins localhost tomcat部署时被拒绝访问

12

Maven:无法部署项目,访问被拒绝

33

生成项目时访问被拒绝

31

使用XML文档部署Web项目时,构建服务器上的“访问被拒绝”

39
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文