示例#1
0
    public WindMap(int xSize, int ySize, TerrainMap terrainmap, TemperatureMap temperaturemap, int month)
    {
        this.vectormap = new Map <Vector2>(xSize, ySize);
        this.grid      = new Wind[xSize, ySize];
        this.xSize     = xSize;
        this.ySize     = ySize;
        this.month     = month;
        TradeWindGenerator     twg              = new TradeWindGenerator(xSize, ySize);
        RecursiveWindGenerator rwg              = new RecursiveWindGenerator(temperaturemap);
        Map <Vector2>          tradeWindMap     = twg.generateTradeWindMap(terrainmap, month);
        Map <Vector2>          recursiveWindMap = rwg.generateRecursiveWind();

        //blend
        float tw;

        IFunction combination = new ParabolaFunction(4, -10f, 4.15f);

        for (int x = 0; x < xSize; x++)
        {
            for (int y = 0; y < ySize; y++)
            {
                tw = combination.calculate(terrainmap.grid[x, y].height);
                tw = Mathf.Min(tw, 1);
                tw = Mathf.Max(tw, 0);
                vectormap.setAt(x, y, recursiveWindMap.grid[x, y] * (1.2f) * (1 - tw) + tradeWindMap.grid[x, y] * tw);
            }
        }
        smoothConvert(8, terrainmap);
    }
    private float getLandTemperature(float latitude, int month)
    {
        IFunction par = new ParabolaFunction((-4f / 555f), (40f / 111f), (1140f / 37f));

        return(par.calculate(latitude + Latitude.monthlyShift(month + 6, landMonthlyDelta) + 3 * landMonthlyDelta));
    }
    private float getSeaTemperature(float latitude, int month)
    {
        IFunction par = new ParabolaFunction((-1f / 252f), (5f / 36f), (275f / 14f));

        return(par.calculate(latitude + Latitude.monthlyShift(month + 6, seaMonthlyDelta) + 3 * seaMonthlyDelta));
    }