在圆圈上找到点

时间:2013-03-20 14:11:20

标签: c++ algorithm geometry

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

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

一旦我们得到这些点,我们就会尝试将它们放入几个复杂的方程式来计算机器人手臂的角度来绘制这个形状。这不是优先事项,但我认为我应该把这个问题包括在我们的整体目标中。

如何创建一个增量来计算两个起点之间半圆线上的所有坐标? 然后将这些值放入上面代码中的方程式中,以计算机器人手臂的角度。寻找一种方法来做到这一点,而无需单独计算每个点,即创建一个可以一次完成的增量。

This是我们的目标,用粗体计算点数。

3 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分: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)偏移到实际中心。

答案 2 :(得分:0)

你可以通过将方程式改为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.