2017-12-09 5 views
-3

나는 2 차원의 정규화 된 [0,1] 값을 가져야하고 내 경우 "히트 맵"을 나타내는 float 배열을 가지고 있습니다. 각 셀의 값은지도의 중심으로부터 얼마나 멀리 떨어져 있는지에 따라 달라지며 하나의 축 (세로 또는 y) 만 중요합니다 (중심에서 위쪽/아래쪽으로가는 그라디언트처럼 보입니다). 중앙 셀에는 최대 값 (1)이 있어야하고 경계선에는 최소값 (0)이 있어야합니다. 그래서 필요한 것은 각 셀의 값을 계산할 수있는 함수입니다. 여기 배열의 값이 같을 수있는 방법의 일례이다 (붉은 색은 최대 값을 나타내고, 청색 색상 그라데이션을 수행하지 않을 수 있으므로 판단하지 않는 최소값을 나타냄)그래디언트 배열 값 계산

enter image description here

을 그리고 여기에 내가 배열을 초기화에 사용하는 코드가, 내가 필요한 기능이 어딘가에 누워해야한다는 것을 알고

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

난 당신이 지금까지 부동의 세포는 방법에 따라 달라집니다 normilized 값을 반환하는 함수를 필요로 알고있는 것처럼 지도 중심을 기준으로 (가장 작은 값으로 도착한다; 하나의 축 사항)

일반적인 생각된다 :지도 크기별로

  1. 으로 나눔 셀 위치
  2. 그 값으로부터 감산 절반 (0.5)을 삭제 (Subtration)에 의해
  3. GET 값으로부터 두 번 이전의 절대 값을 곱한 하나

코드 :

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

이것은 잘 구성된 답변이지만, OP는 Swift를 사용하여 답변을 찾고 있습니다. C# 코드를 Swift로 번역하십시오. –