Пример #1
0
        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);
    }