Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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++_Loops_Point_Spiral - Fatal编程技术网

C++ 如何在给定旋转度的螺旋上获得点?

C++ 如何在给定旋转度的螺旋上获得点?,c++,loops,point,spiral,C++,Loops,Point,Spiral,在这个问题中,我发现了最接近于解释我需要什么的东西: 然而,这并不是我想要的 要绘制的螺旋线是阿基米德螺旋线,所获得的点之间的距离必须相等。(引用:来自上面链接的问题。) 这正是我想要的阿基米德螺旋方程 用户可以输入一组特定的数据,这些数据通常不是基于螺旋而是基于圆形。它们如下:中心点[X,Y,Z]、半径、水平间隔[可称为X间隔,取决于图形]、垂直间隔[可称为Y间隔,取决于图形],以及最重要的旋转度。我希望水平间隔是连续点之间的距离,因为它们之间的距离必须相同。我还希望垂直间隔是“平行”曲线之间

在这个问题中,我发现了最接近于解释我需要什么的东西:

然而,这并不是我想要的

要绘制的螺旋线是阿基米德螺旋线,所获得的点之间的距离必须相等。
(引用:来自上面链接的问题。)

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

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

因此,考虑到特定的输入选择(是的,有些可以忽略),我如何迭代所有连续的等距点,以达到输入度(可能非常大,但有限),并返回这些点的每个点的X和Y点

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

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


假设一个二维情况和一个以零为中心的阿基米德螺线(a=0),那么方程也是如此。然后将连续的线分开,以获得设置的“垂直间距”

从中心到给定角度点的弧的长度由给出,但他的解很难处理。相反,我们可以将弧的长度近似为(对于大θ近似,使用非常粗糙的近似值)。重新排列,使我们能够确定与所需的“水平间距”相对应的角度。如果这个近似还不够好,我会考虑使用牛顿·拉斐逊(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);

假设一个二维情况和一个以零为中心的阿基米德螺线(a=0),那么方程。然后将连续的线分开,以获得设置的“垂直间距”

从中心到给定角度点的弧的长度由给出,但他的解很难处理。相反,我们可以将弧的长度近似为(对于大θ近似,使用非常粗糙的近似值)。重新排列,使我们能够确定与所需的“水平间距”相对应的角度。如果这个近似还不够好,我会考虑使用牛顿·拉斐逊(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);

我投票结束这个问题,因为它不是一个编程问题。它可能适合数学。SE。它非常适合编程。如果我是为了数学而做的,我已经知道如何绘制它了。我只需要能够通过我的程序中的点。@CoreyIles那么你的代码在哪里?我唯一的代码是螺旋线。我不知道这个螺旋从哪里开始(除了函数名)。我尝试将该链接中的代码转换为我需要的代码,但无法使其正常工作。@CoreyIles那么您的问题就相当于一个问题。我投票结束这个问题,因为它不是一个编程问题。它可能适合数学。SE。它非常适合编程。如果我是为了数学而做的,我已经知道如何绘制它了。我只需要能够通过我的程序中的点。@CoreyIles那么你的代码在哪里?我唯一的代码是螺旋线。我不知道这个螺旋从哪里开始(除了函数名)。我试图将该链接中的代码转换为我需要的代码,但我无法使其正常工作。@CoreyIles然后你的问题就变成了一个问题。这几乎是我说的我需要的,所以我会接受。这几乎是我说的我需要的,所以我会接受。