4

数学や幾何学はあまり得意ではありませんが、角度を増やして線分を描きたいと思っています。私が描きたいのは、手を上げて指を広げたときのようなものです。共通の点から始まり、それらの間で等しい角度で広がる線です。

私はこれを試しました:

len = 300;
angle = 10;

for (i = 0; i <= 5; ++i) {
    endPointX = 50 + len * Math.cos(angle);
    endPointY = 50 + len * Math.tan(angle);
    draw.Line(50, 50, endPointX, endPointY);
    angle += 10;
}

しかし、それは完全に間違っており、このようなものを生成します

http://i.stack.imgur.com/taX40.png

しかし、私はこのようなものが欲しいです(悪いmspaint、申し訳ありません):

http://i.stack.imgur.com/8xfpp.png

これの正しい数学は何ですか?

4

4 に答える 4

9

あなたの質問には2つの別々の問題があります。それぞれについて説明します。


あなたの状況のASCII画像は次のとおりです。

                   B
                   +
                  /|
                 / |
                / |
               / |
         レン / | y
             / |
            / |
           / |
          / __|
         / θ | | |
        +---------+
      A×C

これは直角三角形です。次の 3 つの側面があります。

  • 90° の角度の反対側の図の対角線は斜辺と呼ばれ、長さがありlenます。斜辺は、あなたが描こうとしているものです。
  • 垂直辺は角の反対側でθ、長さがありyます。
  • 水平辺は角に隣接する辺でθ、長さはxです。

上の図を考えると、次の方程式が成り立ちます。

cos(θ) = x/len
sin(θ) = y/len

これらの方程式は別の言い方です。

  • 角度の余弦は、隣接する辺の長さを斜辺の長さで割った値に等しくなります。
  • 角度の正弦は、反対側の長さを斜辺の長さで割った値に等しくなります。

と の方程式を解くxと、次のようになりyます。

x = len * cos(θ)
y = len * sin(θ)

sin()したがって、 andcos()ではなくcos()andが必要ですtan()。ポイントAが原点にない場合は、次のようにオフセットxyて追加する必要があります。

x = len * cos(θ) + 50
y = len * sin(θ) + 50

xとの値を使用して、三角形上のy点の座標を見つけることができるためB、線を引くことができます。


また、Java でプログラミングしていると仮定すると、クラスの三角関数は度ではなくラジアンMathで角度を期待します。三角関数を提供する多くのプログラミング言語はこのようなものです。

ラジアンと度は同じものを測定しますが、度での完全な回転は から0まで360°、ラジアンでの完全な回転は から0までです。

角度を度単位でラジアンに変換するには、角度に を掛けπ/180ます。Java では、定数πは によって提供されMath.PIます。

たとえば、角度 10° は10 * π/180、またはπ/18ラジアンに相当します。

于 2011-04-05T23:46:01.453 に答える
0

あなたは日焼けを使うべきではなく、罪を使うべきです。正しく覚えていれば、Math.cos(angle / 180);のようになります。-Math.sin(angle / 180); 罪に対する否定は重要です。

于 2011-04-05T23:49:29.417 に答える
0

まず、cosandsinではなくcosandが必要ですtan

次に、ほとんどの数学ライブラリは、度ではなくラジアンで三角関数を実行します。実際10、非常に大きな違いです。度からラジアンに変換するには、 を掛け(pi/180)ます。

于 2011-04-05T23:46:12.117 に答える
0

角度が不均一に見える理由は、10 を追加するたびに、実際には円の周りで線を 1.6 回回転させているからです。

数学関数は、角度が度数ではなくラジアンであることを想定しています。

360 度 = 2*Math.PI ラジアン。

10 の代わりに、「2*Math.PI/36.0」と書きます。

また、tan の代わりに sin を使用します。

于 2011-04-05T23:48:17.883 に答える