private static coefficients[] getCoefficients(double[,] matrix) { var lines = matrix.GetLength(0); var columns = matrix.GetLength(1); var coefficientMatrix = new coefficients[lines]; for (var i = 0; i < lines; i++) { coefficientMatrix[i].a = i == 0 ? 0 : matrix[i, i - 1]; coefficientMatrix[i].b = matrix[i, i]; coefficientMatrix[i].c = i == lines - 1 ? 0 : matrix[i, i + 1]; coefficientMatrix[i].d = matrix[i, columns - 1]; } coefficientMatrix[0].u = (-1) * coefficientMatrix[0].c / coefficientMatrix[0].b; coefficientMatrix[0].v = coefficientMatrix[0].d / coefficientMatrix[0].b; for (var i = 1; i < lines; i++) { coefficientMatrix[i].u = (-1) * coefficientMatrix[i].c / (coefficientMatrix[i].a * coefficientMatrix[i - 1].u + coefficientMatrix[i].b); coefficientMatrix[i].v = (coefficientMatrix[i].d - coefficientMatrix[i].a * coefficientMatrix[i - 1].v) / (coefficientMatrix[i].a * coefficientMatrix[i - 1].u + coefficientMatrix[i].b); } return(coefficientMatrix); }
private float propulsionNoise(coefficients input) { //TODO: Propulsion noise coefficients for road gradient and acceleration etc. //Road surface correction: (Standard values) float surfaceCoefficient = input.a + input.b * Mathf.Log10(averageSpeed / 70); return(input.AP + input.BP * (averageSpeed - 70) / (70) + surfaceCoefficient); }
private float rollingNoise(coefficients input, float temperature) { //No studded tires, standard road conditions, see cnossos-eu p.34 float temperatureCoefficient; //Simplified temperature correction: if (category == VehicleType.LIGHT) { temperatureCoefficient = 0.08f * (20.0f - temperature); } else if (category == VehicleType.MEDIUM || category == VehicleType.HEAVY) { temperatureCoefficient = 0.04f * (20.0f - temperature); } else { temperatureCoefficient = 0; } return(input.AR + input.BR * Mathf.Log10(averageSpeed / 70) + temperatureCoefficient); }