4

(0,-310)私たちはC++でコーディングしており、特定のポイント(例:)を開始し、特定のポイントで終了する半円を持ってい(0,310)ます。半径があり、方程式がありますX^2 + Y^2 = r^2。ここで、この円の線上のいくつか (たとえば 10 以上) の点を計算しようとしています。

したがって、計算されたすべてのポイントが円の線上にあることを確認するために、上記の式を使用して、これらのポイント間の Y/X 値を計算する増分を作成しようとしています。

これらのポイントを取得したら、それらをいくつかの複雑な方程式に入れて、この形状を描画するロボット アームの角度を計算しようとしています。これは実際には優先事項ではありませんが、私たちの全体的な目的を質問に含める必要があると思いました。

2 つの始点の間の半円の線上のすべての座標を計算する増分を作成する方法は?
次に、これらの値を上記のコードの方程式に入れて、ロボット アームの角度を計算します。各ポイントを個別に計算せずにこれを行う方法を探しています。つまり、一度にそれを行うインクリメントを作成します。

これは、太字のポイントを計算するために、私たちが目指していることのようなものです。

4

3 に答える 3

4

円の点は、次の式を使用して決定できます。

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

描いている円の部分、部分、または円弧を決定し、開始角度と終了角度を決定する必要があります。

それ以外の場合は、SO と Web で「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


X = X0 + Cos(Theta)*r
Y = Y0 + Sin(Theta)*r
whileあなた
の場合 (X0,Y0) = ( 0,0)、r = 310、シータの範囲は -180 ~ 180 (cos と sin が度数の場合) または -Phi - Phi (cos と sin が半径の場合) の間です。

10 ポイントが必要な場合は、シータ範囲を取得して 10 に分割し、それらの値ごとに X、Y を計算する必要があります。

于 2013-03-20T14:20:20.277 に答える