gpt4 book ai didi

c++ - 如何改变椭圆周围的速度

转载 作者:行者123 更新时间:2023-11-28 04:45:21 25 4
gpt4 key购买 nike

我有一个 C++ 程序,它创建一个偏移量列表,对应于绕椭圆的遍历。我需要改变速度,以便更多时间(即更多产生的偏移量)靠近椭圆的远端。椭圆又长又瘦,我当前计算偏移的方法导致椭圆中心附近有更多偏移,这与我想要的相反。

代码:

// breathingPeriod, intervalMS, and yRadius are variables.
// Good defaults are: breathingPeriod = 5, intervalMs = 10, yRadius = 20
const int points = breathingPeriod * 1000 / intervalMS;
const double velocityCoeff = 360 / (breathingPeriod * 1000);
const zRadius = 3;
std::ofstream out("output.txt");


for(int i = 0; i < points; ++i)
{
const int age = intervalMS * i;
const uint64_t thetaDeg = static_cast<uint64_t>(age * velocityCoeff) % 360;
const double thetaRad = thetaDeg * M_PI / 180.0;
const double tanTheta = tan(thetaRad);
double zOffset= (yRadius* zRadius) / sqrt(pow(yRadius, 2) + pow(zRadius, 2) * pow(tanTheta, 2));

if(thetaRad > M_PI_2 && thetaRad <= 3 * M_PI_2)
{
zOffset = -zOffset;
}
const double yOffset = zOffset * tanTheta;
double xOffset = 0;
std::string str;
str += std::to_string(xOffset) + " " + std::to_string(yOffset) + " " + std::to_string(zOffset) + "\n";

out << str;
}
out.close;

我已经尝试根据前一个角度的余弦值改变速度,但我还没有成功。

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

最佳答案

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

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

enter image description here

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

enter image description here

曲线的梯度在 theta 是 pi 的倍数附近最陡,在 pi/2 的奇数倍附近最浅。

然后您的椭圆可以通过通常的方法生成:

enter image description here

假设我们在 t 中生成一个由 100 个点均匀分布的序列,并从 a=0 开始,然后我们得到这样的配置文件:

enter image description here

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

enter image description here

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

enter image description here

在 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++ 中相应的代码更加冗长,但实现起来很简单。

关于c++ - 如何改变椭圆周围的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49365535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com