NB. Bill Lam fixed my overapplication of the stitch operator
NB. that fixes the transpose issue I was having with my original
NB. Solution
NB. my way:
,./;"1(3 2$<i. 4 4)
0 1 2 3 0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7 4 5 6 7
8 9 10 11 8 9 10 11 8 9 10 11
12 13 14 15 12 13 14 15 12 13 14 15
0 1 2 3 0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7 4 5 6 7
8 9 10 11 8 9 10 11 8 9 10 11
12 13 14 15 12 13 14 15 12 13 14 15
NB. Bill’s way
,/ ,./&:>"1(3 2$<i. 4 4)
0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7
8 9 10 11 8 9 10 11
12 13 14 15 12 13 14 15
0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7
8 9 10 11 8 9 10 11
12 13 14 15 12 13 14 15
0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7
8 9 10 11 8 9 10 11
12 13 14 15 12 13 14 15
NB. Bill’s way is more of how I would piece together a matrix given a set of
rows by hand
NB. and you can see Bill gets 3 rows of matrices by 2 columns of matrices as
you would expect
NB. if shape knew you were operating on whole matrices.
NB. Raul Miller's solution
NB. (,seed){~($seed)#.($seed)|"1 ($target)#:i.$target
NB. in the above Raul only uses the dimensions of the target
NB. so I created panelize that takes the target dimensions as a parameter
panelize =: 4 : '(,y){~($y)#.($y)|"1 (x)#:i.x'
10 10 panelize p:i.3 3
2 3 5 2 3 5 2 3 5 2
7 11 13 7 11 13 7 11 13 7
17 19 23 17 19 23 17 19 23 17
2 3 5 2 3 5 2 3 5 2
7 11 13 7 11 13 7 11 13 7
17 19 23 17 19 23 17 19 23 17
2 3 5 2 3 5 2 3 5 2
7 11 13 7 11 13 7 11 13 7
17 19 23 17 19 23 17 19 23 17
2 3 5 2 3 5 2 3 5 2
NB. this solution plays into a more general graphics issue that if a window
repaints
NB. I can grab the current window display size in pixels and create a
background to paint it
NB.
NB. My original proposal was to create the window on a multiple of whole
bitmap size
NB. That didn't take into account resizing the window.
NB. Here is the graphics code using Raul’s solution. No resizing in this I
would need to
NB. implement a paint method for the ‘g’ child window
b =: readimg_jqtide_ jpath '~addons/graphics/bmp/toucan.bmp’
$b
144 200
c =: 500 625 panelize b
wd 'pc mywin;pn ToucanWin'
wd 'cc g isidraw'
wd 'set g minwh ', ":(|.$c)
wd 'pshow'
glsel 'g'
0
glpixels 0 0, (|. $c), ,c
0
wd 'pshow'
NB. Elijah’s is the simplest and now that I see it, how did I not run into
it when I was
NB. playing with shape (‘$’) before I asked this question?
NB. Elijah grows the rows and then the columns using shape. He also saves a
keystroke by
NB. His use of return right (‘]’) since the rank specification on the second
$ (’$”1’) will
NB. run into the number parameter for the first $. I say saves a keystroke
because I always
NB. use parenthesis to separate numbers out when they may get parsed as a
vector
NB. Here I create a function out Elijah’s method but I switch things by
growing the columns first
NB. then I grow the rows. I end up with a couple of different panelize
functions from this.
panelize1 =: {{(0{x)$(1{x)$"1 y}}
10 12 panelize1 i.4 4
0 1 2 3 0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7 4 5 6 7
8 9 10 11 8 9 10 11 8 9 10 11
12 13 14 15 12 13 14 15 12 13 14 15
0 1 2 3 0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7 4 5 6 7
8 9 10 11 8 9 10 11 8 9 10 11
12 13 14 15 12 13 14 15 12 13 14 15
0 1 2 3 0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7 4 5 6 7
NB. by cheating and letting J figure out the tacit form I get a tacit for
Elijah’s solution
panelize2 =: 13 : '(0{x)$((1{x)$"1 y)'
panelize2
(0 { [) $ ] $"1~ 1 { [
panelize3 =: (0 { [) $ ] $"1~ 1 { [
10 12 panelize3 i. 4 4
0 1 2 3 0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7 4 5 6 7
8 9 10 11 8 9 10 11 8 9 10 11
12 13 14 15 12 13 14 15 12 13 14 15
0 1 2 3 0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7 4 5 6 7
8 9 10 11 8 9 10 11 8 9 10 11
12 13 14 15 12 13 14 15 12 13 14 15
0 1 2 3 0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7 4 5 6 7
NB. Pascal’s solution didn’t generalize for me very easily. I would need to
calculate dimensions
NB. to get solutions. My brief experimenting shows that he gets to my
intermediate solution
NB. without boxing and the need therefore to raze afterward and applies the ,./
to piece it together
Thanks to everyone for the replies
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm