2010-02-26 2 views
2

선형 메모리로 병합 된 포트란 기반 3D 열 우선 순위 배열이 있습니다. 어떤 수식/알고리즘을 사용하여 Java 3D 행 주요 정렬 배열로 다시 매핑 할 수 있습니까? 예를 들어, 선형 열 - 주요 배열 데이터를 행 - 전 환으로 변환

|1, 2, 3| |10, 11, 12| |19, 20, 21| 
|4, 5, 6| |13, 14, 15| |22 23, 24| 
|7, 8, 9| |16, 17, 18| |25, 26, 27| 

메모리에 다음과 같다

버퍼 = 1, 4, 7, 2, 5, 8, 3, 6, 9, 10, 13, 16, 11, 14, 17 12, 15, 18, 19, 22, 25, 20, 23, 26, 21, 24, 27

이상적으로는 배열 인덱스를 전달하고 선형 메모리로 오프셋을 가져와야합니다. 유사 코드에서는

for(;;) 
{ 
    javaarray[2][2][1] = buffer[Util.LookupOffset(2,2,1)] 
} 

감사합니다.

+1

어쩌면 그것은 내 느낌 일 수도 있지만 질문에서 당신이하고 싶은 것이 절대적으로 명확하지 않습니다. – Roman

+0

죄송합니다. 나는 동의한다. 내가 물어야 할 것은 일반화 된 수식을 열 기반 선형 배열로 상쇄하기로 결정 했어야한다는 것입니다. – javacavaj

답변

2

우선 자바 배열 인덱스는 0부터 시작하므로 javaarray [2] [3] [1] 대신 javaarray [1] [2] [0]을 원할 것입니다.

두 번째로, 나는 당신이하려는 일을 이해하고 있다고 생각합니다.

  • 입력 : 0,0,0 (그것의 1 슬롯) => 출력 :이 0 ( 평탄 어레이 (1)의 인덱스)
  • 입력 : 1,2,0 (슬롯과 12) => 출력 : 15 (평평한 배열의 인덱스 )
  • 입력 : 2,1,2 (26이있는 슬롯) => 출력 : 23 (병합 된 배열의 인덱스 26)

(i, j, k)의 입력에 대해 원하는대로 보입니다.

index = 9 * i + 3 * j + k 
+0

옳은 길로 나를 빠져 나옵니다. 3D column-major 배열에 대한 선형 배열의 오프셋을 얻으려면 다음을 사용했습니다 : index = row + (column * NUMROWS) + (k * NUMROWS * NUMCOLUMNS) – javacavaj