0

これは解決するのが信じられないほど簡単な問題のように思えますが、私が見つけたものはすべて複雑すぎて理解できませんでした。

私はこの基本的な弾道方程式を持っています:

弾道軌道

v、g、x、y がわかっている場合、シータを見つけるにはどうすればよいでしょうか。紙の上で読むのはとても簡単ですが、これがコードでどのように行われるかはわかりません。

[編集 #3:] 私の試み (以下の回答からの入力) は次のとおりです。

gx = g*x
brackets = gx^2 + 2*y*v^2
sqrroot = sqrt( v^4 - g*brackets )

top1 = v^2 + sqrroot
theta1 = atan( top1 / gx )

top2 = v^2 - sqrroot
theta2 = atan( top2 / gx )
4

5 に答える 5

1

もっとこう。

gx = g*x
brackets = g*x^2 + 2*y*v^2
sqrroot = sqrt( v^4 - g*brackets )
top1 = v^2 + sqrroot
theta1 = atan( top1 / gx )
top2 = v^2 - sqrroot
theta2 = atan( top2 / gx )

式のプラスとマイナスを考慮する必要があります。

乗算の前に二乗を計算します。一部の言語では、g*x*x を計算することで g*x^2 を計算できます。

于 2013-07-16T15:24:50.597 に答える
0

交流ソリューション

#include<math.h>

void MattW_f(double *theta_p, double *theta_n, double g, double v, double x, double y) {
  double v2 = v*v;
  double gx = g*x;
  // No check against sqrt(negative number)
  double discriminant = sqrt(v2*v2 - g*(gx*x + 2*y*v2));
  if (theta_p) {
    // atan2() returns -pi to +pi, it is a 4 quadrant arctan.
    *theta_p = atan2(v2 + discriminant, gx);  
    }
  if (theta_n) {
    *theta_n = atan2(v2 - discriminant, gx);
    }
  }
于 2013-07-17T00:02:49.317 に答える
0

arctan メソッドにアクセスできない場合は、準ニュートン アルゴリズムを使用できます。

于 2013-07-16T15:17:58.257 に答える
0

あなたの最後の行で、

theta = atan( equation / gx )

equation設定されていません。topおそらく を代用したいと思うでしょうequation

また、各中間結果 (gx、brackets、sqrroot、および top) を出力することも役立つ場合があります。予期しない中間結果があるかどうかを確認します。

于 2013-07-16T15:20:51.213 に答える