mirror of
https://github.com/BelfrySCAD/BOSL2.git
synced 2024-12-29 08:19:43 +00:00
Extend the scope of transpose
It allows a transposition in respect to the secondary "diagonal"
This commit is contained in:
parent
1df84f3552
commit
50b0f170e7
2 changed files with 25 additions and 3 deletions
26
arrays.scad
26
arrays.scad
|
@ -1287,6 +1287,10 @@ function array_dim(v, depth=undef) =
|
|||
|
||||
// Function: transpose()
|
||||
// Description: Returns the transposition of the given array.
|
||||
// When reverse=true, the transposition is done in respect to the secondary diagonal, that is:
|
||||
// .
|
||||
// reverse(transpose(reverse(arr))) == transpose(arr, reverse=true)
|
||||
// By default, reverse=false.
|
||||
// Example:
|
||||
// arr = [
|
||||
// ["a", "b", "c"],
|
||||
|
@ -1313,14 +1317,30 @@ function array_dim(v, depth=undef) =
|
|||
// // ["c", "f"],
|
||||
// // ]
|
||||
// Example:
|
||||
// arr = [
|
||||
// ["a", "b", "c"],
|
||||
// ["d", "e", "f"],
|
||||
// ["g", "h", "i"]
|
||||
// ];
|
||||
// t = transpose(arr, reverse=true);
|
||||
// // Returns:
|
||||
// // [
|
||||
// // ["i", "f", "c"],
|
||||
// // ["h", "e", "b"],
|
||||
// // ["g", "d", "a"]
|
||||
// // ]
|
||||
// Example:
|
||||
// transpose([3,4,5]); // Returns: [3,4,5]
|
||||
function transpose(arr) =
|
||||
function transpose(arr, reverse=false) =
|
||||
assert( is_list(arr) && len(arr)>0, "The array is not a vector neither a matrix." )
|
||||
is_list(arr[0])
|
||||
? let( l0 = len(arr[0]) )
|
||||
assert([for(a=arr) if(!is_list(a) || len(a)!=l0) 1 ]==[], "The array is not a vector neither a matrix." )
|
||||
[for (i=[0:1:l0-1])
|
||||
[ for (j=[0:1:len(arr)-1]) arr[j][i] ] ]
|
||||
reverse
|
||||
? [for (i=[0:1:l0-1])
|
||||
[ for (j=[0:1:len(arr)-1]) arr[len(arr)-1-j][l0-1-i] ] ]
|
||||
: [for (i=[0:1:l0-1])
|
||||
[ for (j=[0:1:len(arr)-1]) arr[j][i] ] ]
|
||||
: assert( is_vector(arr), "The array is not a vector neither a matrix." )
|
||||
arr;
|
||||
|
||||
|
|
|
@ -476,10 +476,12 @@ module test_array_dim() {
|
|||
}
|
||||
test_array_dim();
|
||||
|
||||
echo(transpose([[1,2,3],[4,5,6]],reverse=true));
|
||||
|
||||
module test_transpose() {
|
||||
assert(transpose([[1,2,3],[4,5,6],[7,8,9]]) == [[1,4,7],[2,5,8],[3,6,9]]);
|
||||
assert(transpose([[1,2,3],[4,5,6]]) == [[1,4],[2,5],[3,6]]);
|
||||
assert(transpose([[1,2,3],[4,5,6]],reverse=true) == [[6,3], [5,2], [4,1]]);
|
||||
assert(transpose([3,4,5]) == [3,4,5]);
|
||||
}
|
||||
test_transpose();
|
||||
|
|
Loading…
Reference in a new issue