2017-12-09 13 views
-3

私は、正規化[0,1]値を持たなければならない2次元の浮動小数点配列を持ち、私の場合は「ヒートマップ」を表しています。各セルの値は、マップの中心からどのくらい離れているかによって異なりますが、1つの軸(垂直またはy)のみが重要です(中心から上下に移動するグラデーションのように見えます)。中央のセルは最大値(1)を持ち、境界線のセルは最小値(0)を持たなければなりません。だから私が必要とするのは、各セルの値を計算できる関数です。配列の値を勾配で計算する

enter image description here

:ここ は、アレイ内の値が(赤色が最小値を表す最大値と青色を表し、色勾配に従わないかもしれないので、それを判断してはいけない)ように見えることができる方法の例であります私はあなたがフロートセルがどのくらい離れているかに依存normilized値を返す関数が必要に理解したよう

func createBandsForTwoDArray() -> [[Float]] { 
    let columns = 100 
    let rows = 100 
    var twoDArray = Array(repeating: Array(repeating: Float(0), count: columns), count: rows) 
    for y in 0..<rows { 
     for x in 0..<columns { 
      // How to calculate cell value? 
      let n = magicValueCalculation(x, y) 
      twoDArray[y][x] = Float(n) 
     } 
    } 
    return twoDArray 
} 
+3

質問は詳細が不足していて、かなり広範囲です(「これを理解するのに役立ちます」)。特定のものを絞り込んで詳細な質問をすると、より良い結果が得られます。また、質問に関連するすべての画像は、質問に最もよくインライン展開されます。私はdownvoteをしなかったが、それが私が頻繁に質問をdownvoted見ている理由です。 – hatchet

+0

質問の最初の部分*「各座標にグラデーション値を追加する方法」*は、「これらのバンドを追加するにはどうすればよいでしょうか」* - そのような動機付けについて詳しく説明できますか?また、このバンド構造が物理的に現実的な温度分布ではないことは確かです。 – meowgoesthedog

+0

あなたの質問に関連するいくつかの助けが必要な場合は、関連するコードを質問に(コードの絵ではなくテキストとして)入れる必要があります。コードに必要なものが何であるかを明確に示します。 – rmaddy

答えて

1

:そしてここで私は、配列を初期化するために使用したコード、私は必要な機能がどこかに置く必要があることを知っています地図中心からの距離が小さいほど取得;一つだけ軸事項)

は、一般的な考え方である:

  1. マップサイズ
  2. 減算半分(0.5)によってdevideセル位置がその値からsubtrationによって
  3. GET値から2回前の絶対値を乗算しました1

コード:

func createBandsForTwoDArray(columns: Int, rows: Int) -> [[Float]] { 
    var twoDArray = Array(repeating: Array(repeating: Float(0), count: columns), count: rows) 
    for y in 0..<rows { 
     let h = getHeat(pos: Float(y), len: Float(rows)) // Heat needs calculation only once per row 
     for x in 0..<columns { 
      twoDArray[y][x] = h 
     } 
    } 
    return twoDArray 
} 

func getHeat(pos: Float, len: Float) -> Float { 
    var heat = pos/len-0.5 
    heat = 1-abs(heat)*2 
    return heat 
} 

ここで、posはセルのy位置で、lenはマップの高さです。また、同じ行のメンバは同じ値を持つので、各行の値を1回だけ見つけることによってメソッドを高速化できます。また、liniar以外の関数を必要とする場合は、結果を得ることができます。

+1

これはうまく構成された回答ですが、OPはSwiftを使用して回答を探しています。 C#コードをSwiftに翻訳してください。 –

関連する問題