4

我们正在用 C++ 编码,有半个圆圈,从某个点开始(例如(0,-310))并在某个点结束(0,310)。我们有半径,我们有方程X^2 + Y^2 = r^2。现在我们正在尝试计算这个圆线上的一些(比如 10+)点。

因此,我们试图创建一个增量来计算这些点之间的 Y/X 值,使用上面显示的等式来确保计算的所有点都在圆的线上。

一旦我们有了这些点,我们就会尝试将它们放入几个复杂的方程中,以计算要绘制此形状的机器人手臂的角度。这并不是真正的优先事项,但我认为我应该在问题中包含我们的总体目标。

如何创建一个增量来计算我们两个起点之间的半圆线上的所有坐标?
然后将这些值代入上面代码中的方程,计算机械臂的角度。在不单独计算每个点的情况下寻找一种方法,即创建一个可以一次性完成的增量。

就是我们的目标,以粗体计算点。

4

3 回答 3

4

圆的点可以使用以下公式确定:

x = radius * cos(angle)  
y = radius * sin(angle)

您必须确定要绘制的圆的部分、部分或圆弧,并确定起始角度和结束角度。

否则,请在 SO 和网络上搜索“arc drawing algorithm c++”。

于 2013-03-20T14:19:11.277 回答
3

点需要均匀分布吗?如果没有,那么您可以直接使用您的公式:

// assume half-circle centered at (0,0) and radius=310
double r = 310.0;
int n = 10;
for( int i=0; i<n; i++ )
{
   double x = i*r/n;
   double y = sqrt( r*r - x*x );
   // both (x,y) and (x,-y) are points on the half-circle
}

一旦这个工作正常,您还可以使用 x 值的分布来近似圆周围的均匀间距。

如果你的圆没有以中心为中心,(0,0)那么只需偏移(x,y)由实际中心计算的值。

于 2013-03-20T15:17:09.843 回答
1

您可以通过将方程式更改为 Theta (角度)来做到这一点:
X = X0 + Cos(Theta)*r
Y = Y0 + Sin(Theta)*r

而在您的情况下为 (X0,Y0) = ( 0,0), r = 310 和 Theta 范围在 -180 - 180 之间(如果你的 cos 和 sin 以度为单位)或 -Phi - Phi 之间(如果 cos 和 sin 以半径为单位)。

现在,如果您想要 10 点,您需要获取您的 Theta 范围,并将其拆分为 10 并为每个值计算 X、Y。

于 2013-03-20T14:20:20.277 回答