Как видно из приведенного ниже кода, у меня есть пространство имен с парой функций stati c и массивом stati c 2D float. Моя проблема с возвращаемым значением второй функции: она возвращает 0, когда она должна возвращать 1.16 (значение «коэффициенты»).
Я прошел, и у «коэффициентов» всегда есть правильные значения, даже в автоматическом режиме значение для коэффициентов [один * 2] [два] является правильным. Нет ошибок при чтении из файла. Оба материала, которые я передаю, - 6 (резина), поэтому они не выходят за пределы массива.
Пожалуйста, помогите! Это и я, и приятель оба в тупик. (PS: извините за странный отступ)
enum Material
{
ICE = 0,
GLASS = 1,
CONCRETE = 2,
WOOD = 3,
METAL = 4,
SMOOTH_METAL = 5,
RUBBER = 6
};
namespace Materials
{
static float coefficients[14][7];
static void ReadFrictionCoefficientsFromFile()
{
std::ifstream file("FrictionCoefficients.csv");
if (!file.is_open())
{
std::cout << "ERROR: cannot open file FrictionCoefficients.csv" << std::endl;
return;
}
std::string line;
float val;
int row = 0;
while (std::getline(file, line))
{
std::stringstream ss(line);
int col = 0;
while (ss >> val)
{
coefficients[col][row] = val;
if (ss.peek() == ',') ss.ignore();
col++;
}
row++;
}
file.close();
}
static float GetCombinedStaticFriction(const Material m1, const Material m2)
{
int one = (int)m1, two = (int)m2;
if (one > two)
{
one = (int)m2;
two = (int)m1;
}
return coefficients[one * 2][two]; // -- ISSUE -- //
}
}
Редактировать: добавлены строки, которые вызывают соответствующие функции
Materials::ReadFrictionCoefficientsFromFile();
friction_static = Materials::GetCombinedStaticFriction(body1->rigidbody.material, body2->rigidbody.material);