Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/165.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何改变椭圆周围的速度 我有一个C++程序,它创建一个对应于遍历椭圆的偏移量列表。我需要改变速度,使更多的时间,即更多的偏移量靠近椭圆的远端。椭圆又长又细,我当前计算偏移的方法会导致椭圆中心附近出现更多偏移,这与我想要的正好相反_C++_Math_Trigonometry - Fatal编程技术网

如何改变椭圆周围的速度 我有一个C++程序,它创建一个对应于遍历椭圆的偏移量列表。我需要改变速度,使更多的时间,即更多的偏移量靠近椭圆的远端。椭圆又长又细,我当前计算偏移的方法会导致椭圆中心附近出现更多偏移,这与我想要的正好相反

如何改变椭圆周围的速度 我有一个C++程序,它创建一个对应于遍历椭圆的偏移量列表。我需要改变速度,使更多的时间,即更多的偏移量靠近椭圆的远端。椭圆又长又细,我当前计算偏移的方法会导致椭圆中心附近出现更多偏移,这与我想要的正好相反,c++,math,trigonometry,C++,Math,Trigonometry,代码: 我已经尝试过根据前一个角度的cos来改变速度,但是我还没有成功地实现 虽然运动类似于轨道,但它不需要遵循轨道的大部分规则。此外,输入参数与正常轨道力学方程完全不同,目标是随着时间的推移为单个对象创建偏移,而不是在给定观察者位置和恒星坐标数据库的情况下计算出大量物体的位置。从你的问题听起来,似乎你想要一种调整椭圆周围采样点间距的方法,而不是拥有一个生成轨道的特定物理系统。显然,如果你有一个由引力场定义的椭圆轨道,那么方程是,并且提供了速度和位置之间的固定关系,作为时间的函数 如果您想要的只

代码:

我已经尝试过根据前一个角度的cos来改变速度,但是我还没有成功地实现


虽然运动类似于轨道,但它不需要遵循轨道的大部分规则。此外,输入参数与正常轨道力学方程完全不同,目标是随着时间的推移为单个对象创建偏移,而不是在给定观察者位置和恒星坐标数据库的情况下计算出大量物体的位置。

从你的问题听起来,似乎你想要一种调整椭圆周围采样点间距的方法,而不是拥有一个生成轨道的特定物理系统。显然,如果你有一个由引力场定义的椭圆轨道,那么方程是,并且提供了速度和位置之间的固定关系,作为时间的函数

如果您想要的只是椭圆周围点的可调间距,那么可以实现这一点的一种方法就是让角度参数非线性变化,但仍然保证单调覆盖范围[0,2*pi]。假设您有一个覆盖范围[0,2*pi]的时间坐标,但您的角度由以下关系定义:

其中,偏度参数a必须在-0.5、0.5范围内,以确保角度不会在曲线上的任何点处回溯。如果a=0.3,则产生如下趋势:

其中,曲线的梯度在θ是π的倍数附近最陡,在π/2的奇数倍数附近最浅

然后,您的椭圆可以通过常规配方生成:

假设我们生成一个由100个点组成的序列,这些点在t中均匀分布,并从a=0开始,然后我们得到如下轮廓:

如果我们将a增加到0.2,我们将得到在y轴附近更紧密分组的点:

将a进一步增加到0.48,我们得到更紧密的聚束:

在Python中,这可以通过以下方式实现:

import numpy

xRadius = 10
yRadius = 5
skew = 0.48

t = numpy.linspace(0, 2 * numpy.pi, 100)
theta = t + skew * numpy.sin(2*t)
x = xRadius * numpy.cos(theta)
y = yRadius * numpy.sin(theta)

显然,C++中的相应代码更冗长,但直接实现。

你需要物理学家,而不是程序员。向下滚动到位置作为时间的函数。去物理学家那里得到公式。这可能比你想象的要简单。试着去实现它。如果您不能,请再打电话给我们。@Ripi2这太复杂了,无法处理低精度的结果。。。由于椭圆的特性和速度特性。开普勒和牛顿/D'LAMBER是最简单和更精确的方法。@ S.CaseI将简单的C++代码添加到只使用A,B,M而不使用其他轨道。parameters@S.Casey我在副本中添加了更好的描述开普勒方程的图像
import numpy

xRadius = 10
yRadius = 5
skew = 0.48

t = numpy.linspace(0, 2 * numpy.pi, 100)
theta = t + skew * numpy.sin(2*t)
x = xRadius * numpy.cos(theta)
y = yRadius * numpy.sin(theta)