2016-01-11 130 views
1

我有一個2d矩陣 我必須對角地填充它,就像流體一樣。根據旋轉填充2d陣列(矩陣)

任意旋轉在-45和45度之間。 (爲例如32度)

一些情況:

0度

0 0 0 0 0 0 
0 0 0 0 0 0 
0 0 0 0 0 0 
1 1 1 1 1 1 
1 1 1 1 1 1 
1 1 1 1 1 1 

-45度

0 0 0 0 0 0 
1 0 0 0 0 0 
1 1 0 0 0 0 
1 1 1 1 0 0 
1 1 1 1 1 0 
1 1 1 1 1 1 

45度

0 0 0 0 0 0 
0 0 0 0 0 1 
0 0 0 0 1 1 
0 0 1 1 1 1 
0 1 1 1 1 1 
1 1 1 1 1 1 
+0

不錯的問題,你有一些代碼顯示? –

+0

@Nina my array myArray = [[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0], [1,1,1,1,1,1],[1,1,1,1,1,1],[1,1,1,1,1,1]]; var degree = 0; – Micky

回答

1

這是不大完美的發佈的例子,但它非常接近。爲了獲得更好的傾斜分辨率,我製作了一個更大的陣列。只需使用sizedeg變量即可獲得所需的輸出。

var arr = []; 
var size = 10; 
var deg = -45; 

for(var i = 0; i < size; i++){ 
    arr.push([]); 
    for(var j = 0; j < size; j++){ 
     arr[i].push(0); 
    } 
} 

var leftFill = .5 - (deg/90); 
var rightFill = .5 + (deg/90); 
var distanceToCover = rightFill - leftFill; 

for(var i = 0; i < arr.length; i++){ 
    for(var j = 0; j < arr[i].length; j++){ 
     var xHeight = (leftFill + ((j/(arr[i].length - 1)) * distanceToCover)); 
     var xPos = (arr.length - i)/size; 
     if(xPos <= xHeight) arr[i][j] = 1; 
    } 
} 

for(var i = 0; i < arr.length; i++){ 
    var logStr = i + ': '; 
    for(var j = 0; j < arr[i].length; j++){ 
     logStr += (arr[i][j] + ' '); 
    } 
    console.log(logStr);  
} 
+0

太棒了! 正是我想要的。它也適用於一個矩形! – Micky

+0

甜,很高興這爲你工作。只是好奇,是什麼促成了這個問題? – IrkenInvader

+0

這是一個ASCII遊戲。左填充和右填充的好招。 我很難理解你是如何得到xHeight的。 但沒關係。不管作品:P – Micky