0

これは私が現在行っていることですが、おそらくより良い方法があるかどうか疑問に思っていますか?

私のキネマティック変数クラスは、変数が設定されているかどうかにかかわらず、long double 値と bool を保持します。= 代入演算子をオーバーロードしました。

// v_f = v_o + a*t
bool KinematicEquations::equation_vat(KinematicVariable &vo, KinematicVariable &vf,
                                      KinematicVariable &a, KinematicVariable &t)
{
    if (vf.isUsed() && vo.isUsed() && a.isUsed())
        t = (vf.value() - vo.value()) / a.value();  // t = (vf - vo)/a
    else if (vf.isUsed() && vo.isUsed() && t.isUsed())
        a = (vf.value() - vo.value()) / a.value();  // a = (vf - vo)/t
    else if (vf.isUsed() && t.isUsed() && a.isUsed())
        vo = vf.value() - a.value() * t.value(); // vo = vf - a*t
    else if (vo.isUsed() && t.isUsed() && a.isUsed())
        vf = vo.value() + a.value() * t.value(); // vf = vo + at
    else
        return false;

    return true;
}
4

1 に答える 1

2

私が考えるのは、t = 0および/またはa = 0この方程式は多かれ少なかれ役に立たないということです。という結果になりvo = vfます。だから、私は最初にそれらをチェックするといいでしょう。物理学の知識を持つユーザーは、t または a がゼロの場合、それらを解かなければならないという考えに頭を悩ませる可能性があります。

bool KinematicEquations::equation_vat(KinematicVariable &vo, KinematicVariable &vf,
                                      KinematicVariable &a, KinematicVariable &t)
{
    if (t == 0)
        t = (vf.value() - vo.value()) / a.value();  // t = (vf - vo)/a
    else if (a == 0)
        a = (vf.value() - vo.value()) / a.value();  // a = (vf - vo)/t
    else if (vf.isUsed())
        vo = vf.value() - a.value() * t.value(); // vo = vf - a*t
    else if (vo.isUsed())
        vf = vo.value() + a.value() * t.value(); // vf = vo + at
    else
        return false;

    return true;
}

これを行うと、少なくともいくつかの操作を節約できます。変数を初期化すると、変数0が使用されていない場合は0s になり、すべて問題ありません。さらに、最後の 2 つにたどり着くまでに、すでに確実に使用されていることがわかっているaのでt、確認する必要はありません。これは、ユーザーの認識された知識に基づく公正なソリューションだと思います。

于 2013-03-03T07:28:57.573 に答える