Skip to content

DTL.Shape.DiamondSquareAverageCornerIsland (形状クラス)

sitRyo edited this page Jan 15, 2020 · 7 revisions

バージョン 0.1.0以降

namespace DTL.Shape {
    public class DiamondSquareAverageCornerIsland
}

概要

DiamondSquareAverageCornerIslandとは "Matrixの描画範囲にダイヤモンドスクエア法に従って描画値を設置する" 機能を持つクラスである。

描画範囲の全てを必ず塗りつぶすとは限らない (Matrixの初期化が必要)

継承

RectBaseFractal<TDerived> → DTL.Shape.DiamondSquareAverageCornerIsland

インターフェース

IDrawer<int>

ITerrainDrawer

コンストラクタ

Constructors Descriptions Version
DiamondSquareAverageCornerIsland() Matrixの内容をそのまま出力するDiamondSquareAverageCornerIslandのインスタンスを生成します。 v0.1.0
DiamondSquareAverageCornerIsland(uint startX, uint startY, uint width, uint height) 描画範囲を指定したDiamondSquareAverageCornerIslandのインスタンスを生成します。 v0.1.0
DiamondSquareAverageCornerIsland(int minValue) HeightMapの最低高度を指定したDiamondSquareAverageCornerIslandのインスタンスを生成します。 v0.1.0
DiamondSquareAverageCornerIsland(int minValue, int altitude) HeightMapの最低高度と高度を指定したDiamondSquareAverageCornerIslandのインスタンスを生成します。 v0.1.0
DiamondSquareAverageCornerIsland(int minValue, int altitude, int addAltitude) HeightMapの最低高度と高度, HeightMapの各要素に[0, addAlititude]の間で追加される変動値を指定したDiamondSquareAverageCornerIslandのインスタンスを生成します。 v0.1.0
DiamondSquareAverageCornerIsland(DTL.Base.Coordinate2DimensionalAndLength2DimensionalmatrixRange matrixRange, int minValue) 描画範囲と最低高度を指定したDiamondSquareAverageCornerIslandのインスタンスを生成します。 v0.1.0
DiamondSquareAverageCornerIsland(DTL.Base.Coordinate2DimensionalAndLength2DimensionalmatrixRange matrixRange, int minValue, int altitude) 描画範囲と最低高度, 高度を指定したDiamondSquareAverageCornerIslandのインスタンスを生成します。 v0.1.0
DiamondSquareAverageCornerIsland(DTL.Base.Coordinate2DimensionalAndLength2DimensionalmatrixRange matrixRange, int minValue, int altitude, int addAltitude) 描画範囲と最低高度, 高度, HeightMapの各要素に[0, addAlititude]の間で追加される変動値を指定したDiamondSquareAverageCornerIslandのインスタンスを生成します。 v0.1.0
DiamondSquareAverageCornerIsland(uint startX, uint startY, uint width, uint height, int minValue) 描画範囲と最低高度を指定したDiamondSquareAverageCornerIslandのインスタンスを生成します。 v0.1.0
DiamondSquareAverageCornerIsland(uint startX, uint startY, uint width, uint height, int minValue, int altitude) 描画範囲と最低高度, 高度を指定したDiamondSquareAverageCornerIslandのインスタンスを生成します。 v0.1.0
DiamondSquareAverageCornerIsland(uint startX, uint startY, uint width, uint height, int minValue, int altitude, int addAltitude) 描画範囲と最低高度, 高度, HeightMapの各要素に[0, addAlititude]の間で追加される変動値を指定したDiamondSquareAverageCornerIslandのインスタンスを生成します。 v0.1.0

プロパティ

Name Accessibility Descriptions Version
uint startX public get, protected set 描画の開始点X v0.1.0
uint startY public get, protected set 描画の開始点Y v0.1.0
uint width public get, protected set 描画横幅W v0.1.0
uint height public get, protected set 描画縦幅H v0.1.0
altitude public get, protected set 高度 v0.1.0
addAltitude public get, protected set 高度の変動値 v0.1.0
minValue public get, protected set 最低高度 v0.1.0

メソッド

描画範囲取得/描画値取得

Name Descriptions Version
GetPointX 描画始点座標Xを取得 v0.1.0
GetPointY 描画始点座標Yを取得 v0.1.0
GetWidth 描画横幅Wを取得 v0.1.0
GetHeight 描画縦幅Hを取得 v0.1.0
GetPoint 描画始点を取得 v0.1.0
GetValue 高度を取得 v0.1.0
GetAltitude 高度を取得 v0.1.0
GetMinValue 最低高度を取得 v0.1.0
GetAddAltitude 変動値を取得 v0.1.0

描画範囲指定/描画値指定

Name Descriptions Version
SetPointX 描画始点座標Xを指定 v0.1.0
SetPointY 描画始点座標Yを指定 v0.1.0
SetWidth 描画横幅Wを指定 v0.1.0
SetHeight 描画縦幅Hを指定 v0.1.0
SetPoint 描画始点座標(X,Y)を指定 v0.1.0
SetRange 描画範囲(X,Y,W,H)を指定 v0.1.0
SetValue 高度を指定 v0.1.0
SetAltitude 高度を指定 v0.1.0

描画範囲消去/描画値消去

名前 説明 対応バージョン
ClearPointX 描画始点座標Xを消去 v0.1.0
ClearPointY 描画始点座標Yを消去 v0.1.0
ClearWidth 描画横幅Wを消去 v0.1.0
ClearHeight 描画縦幅Hを消去 v0.1.0
ClearPoint 描画始点座標(X,Y)を消去 v0.1.0
ClearRange 描画範囲(X,Y,W,H)を消去 v0.1.0
ClearValue 描画値を消去 v0.1.0
ClearMinValue 最低高度を消去 v0.1.0
ClearAltitude 高度を消去 v0.1.0
ClearrAddAltitude 変動値を消去 v0.1.0

インターフェースの実装

Name Descriptions Version
Draw(int[,]) Matrixに描画する v0.1.0
Create(int[,]) Matrixに描画してMatrixを返す v0.1.0
DrawNormalize(float[,]) [0, 1]に正規化した値をMatrixに描画する v0.1.0

Examples (C#)

コンソール出力

public class GenerateIsland : MonoBehaviour {
    public int height = 65;
    public int width = 65;

    public int minValue = 10;
    public int altitude = 100;
    public int addAltitude = 50;

    private DiamondSquareAverageCornerIsland diamondSquareAverageCornerIsland;

    void Start() {
        var matrix = new int[height, width];
	diamondSquareAverageCornerIsland 
            = new DiamondSquareAverageCornerIsland(minValue, altitude, addAltitude);
        diamondSquareAverageCornerIsland.Draw(matrix);

        new OutputConsole().Draw(matrix);
        new OutputConsole(arg => arg < 90, "..", "##").Draw(matrix);
    }	
}

Output

110 109 108 107 106 105 104 103 102 101 100 99 98 97 96 95 95 0 0 0 
109 114 111 109 108 106 105 107 101 107 105 106 99 100 97 96 90 0 0 0 
109 111 115 112 110 108 107 103 101 105 110 105 101 99 98 92 87 0 0 0 
108 113 112 110 112 110 106 105 100 106 106 105 102 103 95 93 83 0 0 0 
109 109 111 112 114 110 107 103 101 101 102 103 105 98 92 86 81 0 0 0 
108 114 113 111 111 110 110 105 100 105 103 102 99 97 93 88 77 0 0 0 
108 112 117 112 109 111 114 107 100 102 104 99 94 94 94 84 74 0 0 0 
108 110 111 111 106 109 108 106 100 101 98 93 89 86 85 81 71 0 0 0 
109 107 106 105 104 103 102 101 101 96 92 88 84 80 76 72 69 0 0 0 
108 109 111 110 108 108 103 99 97 95 92 87 82 81 73 73 65 0 0 0 
108 112 117 114 113 108 105 99 94 93 93 86 80 75 71 66 62 0 0 0 
108 113 115 116 117 113 104 99 91 88 87 82 78 77 68 63 59 0 0 0 
108 111 115 118 122 113 105 96 88 85 82 79 77 71 66 61 56 0 0 0 
108 114 115 117 114 111 103 96 85 87 81 77 72 71 68 63 53 0 0 0 
108 112 117 111 107 104 102 92 82 81 81 74 68 69 70 60 50 0 0 0 
108 109 108 107 99 98 93 87 79 77 74 70 64 67 61 58 47 0 0 0 
108 104 100 96 92 88 84 80 76 72 68 64 60 56 52 48 45 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
##################################......
##################################......
################################........
################################........
##############################..........
##############################..........
##############################..........
########################................
######################..................
######################..................
######################..................
##################......................
################........................
################........................
################........................
##############..........................
##########..............................
........................................
........................................
........................................

TerrainUtilによるHeightMapの出力例

public class GenerateDiamondSquareAverageCornerIsland : MonoBehaviour {
    public int depth = 20;
    public int width = 64;
    public int height = 64;
    public int minValue = 10;
    public int altitude = 150;
    public int addAltitude = 75;

    private Terrain terrain;
    private DiamondSquareAverageCornerIsland diamondSquareAverageCornerIsland;

    public List<Texture2D> texture2D = new List<Texture2D>();

    void Start() {
        diamondSquareAverageCornerIsland = new DiamondSquareAverageCornerIsland(minValue, altitude, addAltitude);
        this.terrain = GetComponent<Terrain>();
        TerrainUtil terrainUtil =
            new TerrainUtil(terrain, texture2D, diamondSquareAverageCornerIsland, height + 1, width + 1, depth);
        terrainUtil.Draw();
    }
}

Output

IMG_0187 IMG_0185

Clone this wiki locally