【问题标题】:How can I get a point on a spiral given degrees of rotation?如何在给定旋转度数的螺旋上得到一个点?
【发布时间】:2015-11-24 22:11:59
【问题描述】:

在这个问题中,我发现最能帮助解释我需要的东西是:Draw equidistant points on a spiral

然而,这并不是我想要的。

The spiral to draw is an archimedean spiral and the points obtained must be equidistant from each other.(引用:来自上面链接的问题。)

这正是我想要的阿基米德螺旋方程,

用户可以输入一组特定的数据,它们不是基于螺旋线,而是基于圆形图形。它们如下:中心点[X,Y,Z],半径,水平间距[可以称为X间距,取决于图形],垂直间距[可以称为Y间距,取决于图形],最重要的是度数的旋转。我希望水平分离是连续点之间的距离,因为它们之间的距离需要相同。我还希望垂直分离成为“平行”曲线之间的距离。

因此,鉴于特定的输入选择(是的,有些可以忽略),我如何遍历所有连续的等距点才能达到输入度数(可能非常大但有限)和返回那些点的每个点的 X 和 Y 点?

基本上我想要实现的是从零到输入度数的循环,考虑到所有其余的输入和我上面提到的偏好,并为所有等距的连续画一个点点(如果您决定使用代码表示,只需使用“打印”表示绘图)。

我很难解释,但我想我已经讲得很清楚了。这张图上的点正是我所需要的:

【问题讨论】:

  • 我投票结束这个问题,因为它不是一个编程问题。它可能适合 math.SE。
  • 它非常适合编程。如果我是为了数学而做的,我已经知道如何绘制它了。我只需要能够完成我的程序中的要点。
  • @CoreyIles 那么你的代码在哪里?
  • 我唯一的代码是一个螺旋。我不知道从哪里开始这个螺旋(除了函数名之外)。我尝试将该链接中的代码转换为我需要的,但我无法让它正常工作。
  • @CoreyIles 那么你的问题相当于"Gimme teh codez" 问题。

标签: c++ loops point spiral


【解决方案1】:

假设二维情况和一个以零 (a=0) 为中心的阿基米德螺线,因此使用等式 。然后连续的行将 分开,因此要获得 的“垂直间距”,请设置。

从中心到给定角度的点的弧长由Wolfram 给出,但他的解决方案很难使用。相反,我们可以将弧的长度(使用非常粗略的 for-large-theta 近似)近似为。重新排列,使我们能够确定哪些角度对应于所需的“水平间距”。如果这个近似值不够好,我会考虑使用像 Newton-Raphson 这样的东西。您链接到的问题也使用了近似值,尽管不是同一个。

最后,认识到极坐标 转换为笛卡尔坐标如下:; .

我得到以下信息:

这是由以下 MATLAB 代码生成的,但如果这是您真正需要的,它应该足够简单,可以转换为 C++。

% Entered by user
vertspacing = 1;
horzspacing = 1;
thetamax = 10*pi;

% Calculation of (x,y) - underlying archimedean spiral.
b = vertspacing/2/pi;
theta = 0:0.01:thetamax;
x = b*theta.*cos(theta);
y = b*theta.*sin(theta);

% Calculation of equidistant (xi,yi) points on spiral.
smax = 0.5*b*thetamax.*thetamax;
s = 0:horzspacing:smax;
thetai = sqrt(2*s/b);
xi = b*thetai.*cos(thetai);
yi = b*thetai.*sin(thetai);

【讨论】:

  • 这正是我所说的我需要的,所以我会接受它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多