20

左上隅が (0,0) で、角度 30 度、始点 (0,300)、線の長さ 600 が与えられていると仮定すると、線の終点を計算して線が与えられた角度を表します。

C 疑似コードは次のとおりです。

main() {
  int x,y;

  getEndPoint(30, 600, 0, 300, &x, &y);
  printf("end x=%d, end y=%d", x, y);
}

// input angle can be from 0 - 90 degrees

void getEndPoint(int angle, int len, int start_x, int start_y, int *end_x, int *end_y) 
{

    calculate the endpoint here for angle and length

    *end_x = calculated_end_x;
    *end_y = calculated_end_y;
}
4

5 に答える 5

41
// edit to add conversion
    #define radian2degree(a) (a * 57.295779513082)
    #define degree2radian(a) (a * 0.017453292519)

        x = start_x + len * cos(angle);
        y = start_y + len * sin(angle);
于 2009-10-28T16:38:02.527 に答える
2

角度が何に対して測定されているか、または実際に軸がどの方向に向いているかは言いません。これらは違いを生むでしょう。

まず、度からラジアンに変換する必要があります (PI を掛けて 180 で割ります)。次に、角度のサインとコサインを取り、これらに線の長さを掛ける必要があります。座標には 2 つの数値がありますが、軸の方向と角度を測定する場所によって、これらの値のどれが x 座標でどれが y であるか、およびそれらのいずれかを否定する必要があるかどうかによって異なります。

于 2009-10-28T16:47:14.557 に答える
1

math.h必要なすべての三角関数を備えています。-lm構築しているシステムによっては、リンカーに渡す必要がある場合があります (自動の場合もあります)。

于 2009-10-28T16:37:03.543 に答える
0

人々は、complex極座標から直角座標への変換を行う C++ のライブラリを忘れています。

complex<double> getEndPoint(complex<double> const &startPoint, double magnitude, double radians)
{
    return startPoint + polar<double>(magnitude, radians);
}

int main()
{
    complex<double> startingPoint(0.0, 300.0);
    auto newPoint = getEndPoint(startingPoint, 600, 0.523598776);

    cout << newPoint << endl;
}

また、選択した用語にも注意します。名前で見るgetと、どこかに保存されている答えを取得することだと思います。この例では、何かを計算していますが、これはコードのユーザーに誤った保証を与える可能性があります。

于 2013-11-24T19:29:42.123 に答える