首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >计算行星间的引力方向

计算行星间的引力方向
EN

Stack Overflow用户
提问于 2016-01-08 19:26:06
回答 1查看 259关注 0票数 5

我试图用C语言在opengl中建立一个太阳系的模拟。我似乎不知道如何编写计算另一颗行星所受力方向的代码。这就是我到目前为止所拥有的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void attraction(planet self, planet other, float *direction)
{
   float d = vecDistance(self.p, other.p);

   //calc the force of attraction
   float f = G * ((self.mass * other.mass) / (pow(d, 2)));

   //calc the direction of the force
   float vectorDist[3];
   vecSub(self.p, other.p, vectorDist);

   direction[0] = f*vectorDist[0] / d;
   direction[1] = f*vectorDist[1] / d;
   direction[2] = f*vectorDist[2] / d;
}



float vecDistance( float *pV1, float *pV2 )
{
    float fLen=0.0f;

    if(pV1 && pV2)
    {
        float av[3];

        vecSub(pV2, pV1, av);
        fLen=vecLength(av);
    }

    return fLen;
}


void vecSub( float *pV0, float *pV1, float *pVRes )
{
    if(pV0 && pV1 && pVRes)
    {
        pVRes[0]=pV0[0]-pV1[0];
        pVRes[1]=pV0[1]-pV1[1];
        pVRes[2]=pV0[2]-pV1[2];
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-08 23:22:32

如果没有输入数据,很难知道,但我猜您正遇到浮点溢出,因为您操作的值太大了。

例如,如果您的单元位于SI单元系统中,那么:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
venus.mass = 4.87e+24;    // kg
earth.mass = 5.98e+24;    // kg

你方程式中的分子变成:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
self.mass * other.mass == 2.91047e+49;

单精度floating-point numbers不能大于3.4e+38,因此质量乘积被视为无穷大.

当然,高指数在某种程度上相互抵消,因为距离也很大(按1e+10的顺序),引力常数也很小,但是如果上面的积是一个内在的结果,那么所有相关的结果都是错误的。( -1.0#IND的意思是不确定的,对应于NaN,而不是数字,一个无效的浮点数。)

有几种方法可以解决这个问题:

  • 使用可以在浮点系统中安全地平方的值。例如,如果你用地球的质量来规范质量,你会得到大约1.0的数字,这应该是安全的计算。同样,距离的一个好单位可能是astronomical unit
  • 重新排列表达式,以避免中间表达式溢出。例如,不要使用(m1 * m2) / (d*d),而是编写(m1 / d) * (m2 / d)
  • 使用double而不是浮点。最大可表示的double大约是。1.8e+308。请注意,duoble并没有解决这个问题,它只是给了您更大的操作空间。不过,以你为例,你应该做得很好。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34689392

复制
相关文章
盘点一个Python网络爬虫问题
前几天在Python钻石交流群【空】问了一个Python网络爬虫处理的问题,一起来看看吧。他的代码如下:
前端皮皮
2023/10/17
1720
盘点一个Python网络爬虫问题
如何编写一个简易网络爬虫
感谢小臣投稿 本文将简述网络爬虫及其工作流程,结合个人实践,简单介绍如何使用HttpClient、HtmlParser第三方jar工具包,编写一个简易的网络爬虫。 网络爬虫简述及流程架构 网络爬虫,又叫网页蜘蛛,是一种按照一定的规则逻辑,自动地抓取网络信息的程序或者脚本。 在当今网络时代,信息量爆炸性增长,不同领域、不同背景的用户对信息的获取有不同的需求。人们无法在这么海量信息中及时有效地获取到极具针对性的信息。搜索引擎一定程度上也无法根据语义查询,满足用户定制化需求。诸如此
java达人
2018/01/31
1.4K0
如何编写一个简易网络爬虫
盘点一个Python网络爬虫问题
前几天在Python最强王者群【刘桓鸣】问了一个Python网络爬虫的问题,这里拿出来给大家分享下。
Python进阶者
2023/08/31
2160
盘点一个Python网络爬虫问题
网络爬虫
最近在写一个程序,去爬热门事件和热门关键词网站上的数据。在这里介绍一下网络爬虫的种种。
四火
2022/07/15
6590
网络爬虫
盘点一个Python网络爬虫的问题
前几天在Python白银群【大侠】问了一个Python网络爬虫的问题,这里拿出来给大家分享下。
前端皮皮
2023/08/17
1820
盘点一个Python网络爬虫的问题
分享一个playwright网络爬虫实战教程
前几天在Python交流白银群【空翼】问了一道Python网络爬虫的问题,如下图所示。
前端皮皮
2022/08/17
1.9K0
分享一个playwright网络爬虫实战教程
python 网络爬虫入门(一)———第一个python爬虫实例
最近两天学习了一下python,并自己写了一个网络爬虫的例子。 python版本: 3.5 IDE : pycharm 5.0.4 要用到的包可以用pycharm下载: File->Default Settings->Default Project->Project Interpreter 选择python版本并点右边的加号安装想要的包
全栈程序员站长
2022/08/31
2.4K0
python 网络爬虫入门(一)———第一个python爬虫实例
盘点一个Python网络爬虫实战问题
前几天在Python铂金交流群【红色基因代代传】问了一个Python网络爬虫的问题,提问截图如下:
Python进阶者
2022/11/14
1730
盘点一个Python网络爬虫实战问题
精通 Python 网络爬虫:网络爬虫学习路线
本文主要介绍了如何精通Python网络爬虫,从选择编程语言、掌握基础语法、常用爬虫库、数据提取与去重、反爬处理、分布式爬虫、项目实战等方面进行了详细的阐述。同时,文章还推荐了几本与Python网络爬虫相关的书籍,以帮助读者更好地学习和掌握相关知识。
韦玮
2017/08/08
3.5K0
精通 Python 网络爬虫:网络爬虫学习路线
盘点一个网络爬虫中常见的一个错误
前几天在Python白银交流群有个叫【雨就是雨】的粉丝问了一个Python网络爬虫的问题,这里拿出来给大家分享下,一起学习下。
Python进阶者
2022/06/05
2200
盘点一个网络爬虫中常见的一个错误
网络爬虫原理
网络爬虫指按照一定的规则(模拟人工登录网页的方式),自动抓取网络上的程序。简单的说,就是讲你上网所看到页面上的内容获取下来,并进行存储。网络爬虫的爬行策略分为深度优先和广度优先。如下图是深度优先的一种遍历方式是A到B到D 到E 到C到 F(ABDECF)而宽度优先的遍历方式ABCDEF 。
全栈程序员站长
2022/07/22
7890
网络爬虫原理
网络爬虫(一)
爬虫是按照一定规则,自动地提取并保存网页中信息的程序。通过向网站发起请求获取资源,提取其中有用的信息。爬虫在获取信息、整理数据等方面应用广泛。
陆勤_数据人网
2020/11/26
6400
Python——网络爬虫
此篇文章继续跟着小甲鱼的视频来初学网络爬虫,除了小甲鱼的网站上可下载视频,发现b站上也有全套的视频哦,会比下载来的更方便些。 网络爬虫,又称为网页蜘蛛(WebSpider),非常形象的一个名字。如果你
闪电gogogo
2018/01/08
1.5K0
Python——网络爬虫
数据采集技术python网络爬虫_精通Python网络爬虫
网络爬虫(Crawler)又称网络蜘蛛,或者网络机器人(Robots). 它是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。换句话来说,它可以根据网页的链接地址自动获取网页内容。如果把互联网比做一个大蜘蛛网,它里面有许许多多的网页,网络蜘蛛可以获取所有网页的内容。 爬虫是一个模拟人类请求网站行为, 并批量下载网站资源的一种程序或自动化脚本。
全栈程序员站长
2022/09/27
1.8K0
数据采集技术python网络爬虫_精通Python网络爬虫
点进来,这里告诉你:爬虫学习之一个简单的网络爬虫
###概述 这是一个网络爬虫学习的技术分享,主要通过一些实际的案例对爬虫的原理进行分析,达到对爬虫有个基本的认识,并且能够根据自己的需要爬到想要的数据。有了数据后可以做数据分析或者通过其他方式重新结构化展示。 ###什么是网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。via 百度百科网络爬虫 网络蜘蛛(Web spider)也叫网络爬虫(We
小莹莹
2018/04/23
8580
点进来,这里告诉你:爬虫学习之一个简单的网络爬虫
Python网络爬虫实战项目大全,最后一个亮了
wcspider [1]- 微信公众号爬虫。使用爬虫搜索所有微信公众号资料及其文章,通过搜狗搜索获取公众号的openid,创建公众号历史消息请求URL,解析出历史消息总量、历史消息总页数、单个历史消息
Python中文社区
2018/01/31
1.8K0
Python网络爬虫实战项目大全,最后一个亮了
创建一个分布式网络爬虫的故事
编者按:作者通过创建和扩展自己的分布式爬虫,介绍了一系列工具和架构, 包括分布式体系结构、扩展、爬虫礼仪、安全、调试工具、Python 中的多任务处理等。以下为译文: 大概600万条记录,每个记录有15个左右的字段。 这是我的数据分析项目要处理的数据集,但它的记录有一个很大的问题:许多字段缺失,很多字段要么格式不一致或者过时了。换句话说,我的数据集非常脏。 但对于我这个业余数据科学家来说还是有点希望的-至少对于缺失和过时的字段来说。大多数记录包含至少一个到外部网站的超链接,在那里我可能找到我需要的信息。因此
CSDN技术头条
2018/02/06
1.2K0
创建一个分布式网络爬虫的故事
盘点Python网络爬虫入门常见的一个问题
前几天在Python铂金交流群【余丰恺】问了一个Python网络爬虫的问题,如下图所示。
前端皮皮
2022/08/17
3050
盘点Python网络爬虫入门常见的一个问题
学习了《python网络爬虫实战》第一个爬虫,爬取新浪新闻
请安装anaconda,其中附带的spyder方便运行完查看变量 1.进入cmd控制台, 输入 pip install BeautifulSoup4 pip install requests 2.编写代码,代码已经很清晰了,直接运行不会报错并有成功的结果
潇洒坤
2018/09/10
1K0
快速入门网络爬虫系列 Chapter01 | 初识网络爬虫
我们为什么要了解网络爬虫? 因为当今从事科学研究等,需要大量的数据,但是这些数据公开的又非常的少,大量的数据都在大公司的手中。我们这些普通人本身并没有那么多数据,但是我们又需要大量的数据。那么,这时我们就需要用到网络爬虫了。
不温卜火
2020/10/28
8760
快速入门网络爬虫系列 Chapter01 | 初识网络爬虫

相似问题

用节点爬虫或简单爬虫进行NodeJS网络爬行

10

网络爬虫-如何删除div中的子节点?

10

简易网络爬虫

12

自动网络爬虫

40

识别网络爬虫

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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