Render.ru

Math2

#1
То что SL понимает только одномерные массивы
это блин было для меня как серпом по....
Подскажите плиз:
Можно ли индексы aa,bb,cc трехмерного массива размером [a],,[c]
переконвертить в индекс одномерного массива аналогичной
длинны? Типа формула какая и все такое...
Потому как что то типа

index = 0;
for (i = 0; i < aa+1; i+=1){
for (j = 0; j < bb+1; j+=1){
for (k = 0; k < cc+1; k+=1){
index += 1;
}
}
}
index -= 1;

стоит слишком дорого для последнего элемента массива
скажем 100х100х100.
Да к тому же если можно будет сделать
цивилизованным способом то движок разбиения
пространства на воксели вообще заключаеться в
трех строках :)
 
#2
Можно.

Двухмерный случай.

Нужный нам элемент массива - [x,y], размерность массива - [0..a,0..b]. Первый элемент имеет номер 0.

Тогда произвольный элемент имеет номер

(a+1)y+x

Ну то есть нужно просто посчитать, какая строчка, столбец и прочее.

Трехмерный случай по идее будет:

((a+1)y+x)(b+1)+z

хотя я могу и ошибаться...
 
#3
Ага немного обшибся...
Кажеться это работает (Mel)

int $i,$j,$k;
int $a = 4;
int $b = 3;
int $c = 4;
int $count = 0;
int $my = 0;
for ($i = 0; $i<$a; $i++ ){
for ($j = 0; $j<$b; $j++ ){
for ($k = 0; $k<$c; $k++ ){
$my =$i*$b*$c+($j+1)*$k + ($c-$k)*$j;
$count+=1;
$cprint = $count-1;
print("My "+$my+" must be "+$cprint+"\n");
}
}
}
 
Сверху