Решите для пропущенной переменной с известной формулой

Это то, что я делаю в данный момент, но мне просто интересно, может быть, есть лучший способ?

Мой класс Kinematic Variable содержит только длинное двойное значение и логическое значение, если переменная установлена ​​или нет. Я перегружен оператором присваивания.

// 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;
}

0

Решение

То, что я считаю, это то, что с 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 если они не были использованы, они будут иметь 0и все хорошо. Кроме того, к тому времени, когда вы доберетесь до последних двух, вы уже наверняка знаете, что a а также t используются, поэтому нет необходимости проверять. Я думаю, что это справедливое решение, основанное на предполагаемых знаниях пользователя.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]