Как получить значение по проценту в диапазоне двух чисел? Например:
Значение 10% в диапазоне между 0.0 и 20.0 будет 2.0
Значение 50% в диапазоне между -5.0 и 5.0 будет 0
Вся сложность в том, что это векторное вычисление, и - на - здесь не дает +
Диапазон может быть, например, (-5.0, -10.0), (5.0, 10.0), (-5.0, 10.0), в общем, идти и к верху и к низу.
Эта задача возникла в разработке игры. Пример:(float StartValue, float EndValue, float Percent) {
const float OnePercent = (EndValue - StartValue) / 100.0f;
return StartValue + OnePercent * Percent;
}
Но это вычисление работает только если оба числа положительные, и если StartValue всегда ниже, чем EndValue.

21 Авг 2019 в 06:09
228 +1
0
Ответы
1

Чтобы решить эту проблему, вам нужно учесть направление диапазона (вверх или вниз), чтобы правильно определить, какой из значений является начальным, а какой конечным. Также необходимо учитывать знаки чисел при выполнении операций.

Ниже приведен исправленный код для вашей функции:

float GetValueByPercentage(float StartValue, float EndValue, float Percent) {
if (StartValue > EndValue) {
std::swap(StartValue, EndValue); // меняем местами значения, если начальное больше конечного
}
float OnePercent = std::abs(EndValue - StartValue) / 100.0f; // определяем значение одного процента
if (EndValue < 0) {
return EndValue + OnePercent * Percent; // если оба значения отрицательные, нужно идти от большего к меньшему
} else {
return StartValue + OnePercent * Percent; // иначе идем от меньшего к большему
}
}
int main() {
float value1 = GetValueByPercentage(0.0, 20.0, 10); // 2.0
float value2 = GetValueByPercentage(-5.0, 5.0, 50); // 0.0
std::cout << "Value 1: " << value1 << std::endl;
std::cout << "Value 2: " << value2 << std::endl;
return 0;
}

Этот код учитывает различные направления диапазонов и знаки чисел в них, чтобы правильно вычислить значение по проценту в заданном диапазоне.

20 Апр 2024 в 13:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир