Andrew, Oleg's dyadic verb faces below works correctly on my example
4 3 0 ,: _4 _3 _2 -- try

<"_1 [ 4 3 0 faces _4 _3 _2

-- and Oleg claims his faces works in all dimensions, see his examples below.

Kip


Oleg Kobchenko wrote:
> Now based on the model below, we get
> 
>    faces=: 4 : ',/((x ,:"1 x&+"1) ,:"1 y&-"1) y*=i.#y'
> 
> which finds representation of n-1 components of n-cube
> in n-space, i.e. faces of cube in 3D, sides of rectangle 
> in 2D, points of segment in 1D etc.
> 
>    fold=: _2 ]\ <"2   NB. compact view
> 
>    fold 0 0 0 0 0 faces 1 1 1 1 1
> +---------+---------+
> |0 0 0 0 0|1 0 0 0 0|
> |0 1 1 1 1|0 1 1 1 1|
> +---------+---------+
> |0 0 0 0 0|0 1 0 0 0|
> |1 0 1 1 1|1 0 1 1 1|
> +---------+---------+
> |0 0 0 0 0|0 0 1 0 0|
> |1 1 0 1 1|1 1 0 1 1|
> +---------+---------+
> |0 0 0 0 0|0 0 0 1 0|
> |1 1 1 0 1|1 1 1 0 1|
> +---------+---------+
> |0 0 0 0 0|0 0 0 0 1|
> |1 1 1 1 0|1 1 1 1 0|
> +---------+---------+
>    fold 0 0 0 0 faces 1 1 1 1
> +-------+-------+
> |0 0 0 0|1 0 0 0|
> |0 1 1 1|0 1 1 1|
> +-------+-------+
> |0 0 0 0|0 1 0 0|
> |1 0 1 1|1 0 1 1|
> +-------+-------+
> |0 0 0 0|0 0 1 0|
> |1 1 0 1|1 1 0 1|
> +-------+-------+
> |0 0 0 0|0 0 0 1|
> |1 1 1 0|1 1 1 0|
> +-------+-------+
>    fold 0 0 0 faces 1 1 1   NB. cf bottom:  cr"_1 faces
> +-----+-----+
> |0 0 0|1 0 0|
> |0 1 1|0 1 1|
> +-----+-----+
> |0 0 0|0 1 0|
> |1 0 1|1 0 1|
> +-----+-----+
> |0 0 0|0 0 1|
> |1 1 0|1 1 0|
> +-----+-----+
>    fold 0 0 faces 1 1
> +---+---+
> |0 0|1 0|
> |0 1|0 1|
> +---+---+
> |0 0|0 1|
> |1 0|1 0|
> +---+---+
>    fold 0 faces 1
> +-+-+
> |0|1|
> |0|0|
> +-+-+
> 
> 
> 
> 
> 
>> From: Oleg Kobchenko <[email protected]>
> 
> Very quick idea, not necessarily right.
> 
>   {(lx,ly,lz) ; (cx, cy, 
> cz)} = {l ; c} = {location ; components}
> 
>     top y
>         |
>         | back
> left   *----x  right
>        / bottom
> front/
>      z
> 
> Faces:
> 
>   left:   {l              ; c - (cx, 0, 0)}
>   right:  {l + (cx, 0, 0) ; c - (cx, 0, 0)}
> 
>   bottom: {l              ; c - (0, cy, 0)}
>   top:    {l + (0, cy, 0) ; c - (0, cy, 0)}
> 
>   front:  {l              ; c - (0, 0, cz)}
>   top:    {l + (0, 0, cz) ; c - (0, 0, cz)}
> 
> 
> 
> 
> 
>> From: Kip Murray <[email protected]>
>>
> Be patient, a programming question is coming.
> 
> I introduce a 
> discussion of boxes with edges parallel to the coordinate axes. 
> These boxes do not have to be cubes.  They are identified by "located 
> vectors" 
> which are diagonals through the center of the box.  Such a 
> located vector 
> uniquely determines the box, which in special cases 
> can be a 
> face or an edge.
> 
> However, in three dimensions a box can 
> be 
> identified by eight different located 
> vectors: these may begin at 
> any of the eight corners of the box and pass through 
> the center of 
> the box to the diagonally opposite corner.  Thus our first task is 
> to 
> identify a canonical representation of a box.  I will do that below.  
> Your 
> task will be to write a verb that finds the faces of a box.
> 
> A "located vector" is represented by a table a ,: h in which vector a 
> gives the 
> location of the vector's tail, and vector h contains the 
> components, thus 
> providing the direction and length of the located 
> vector.  The located vector 
> goes from location a (the tail) to 
> location 
> a+h (the head).  All of this makes 
> sense in any number of 
> dimensions; we can draw pictures in three dimensions 
> (where #a and 
> #h are 
> both 3).
> 
> Items of array "cubes" below are the eight 
> vectors 
> located at 0 0 0 which 
> represent unit cubes:
> 
>     
> ]cubes 
> =: 8 2 3 $ cubedata
>   0  0  0
> _1 _1 _1
> 
>   0  0  0
> _1 _1  1
> 
>   0  0  0
> _1  1 _1
> 
>   0  0  0
> _1  1  1
> 
>   0  0  0
>   1 _1 _1
> 
>   0  0  0
>   1 _1  1
> 
>   0  0  0
>   1  1 _1
> 
>   0  0  0
>   1  1  1
> 
> 
> Items of array "faces" below represent 
> the faces of the particular unit cube 
> represented 
> by 0 0 0 ,: 1 1 1
> 
>     ]faces =: 6 2 3 $ facedata
>   0  0  0
>   0  1  1
> 
>   0  0  0
>   1  0  1
> 
>   0  0  0
>   1  1  0
> 
>   1  1  1
> _1 _1  0
> 
>   1  1  1
> _1  0 _1
> 
>   1  1  1
>   0 _1 _1
> 
> Verb cr (canonical representation) gives the "canonical" 
> located vector 
> representing a given box.  In three dimensions the 
> canonical located vector 
> starts at the lower left rear corner of the box and proceeds to the upper 
> right 
> front corner.  As a result its 
> components are all 
> positive.  (Here is how I am 
> drawing pictures in 
> three 
> dimensions with the axes labeled 0, 1, and 2:
> 
> 
>          2
>          |
>          |
>          |_________1
>         /
>        /
>       /
>      0
> 
> )
> 
> 
> cr =: ( {. + 0.5 * [: (- |) {: ) ,: [: | {:
> 
> 
>     cr"_1 cubes
> _1 _1 _1
>   1  1  1
> 
> _1 
> _1  0
>   1  1  1
> 
> _1  0 _1
>   1  1  1
> 
> _1  0  0
>   1  
> 1  1
> 
>   0 _1 _1
>   1  1  1
> 
>   0 _1  0
>   1  1  1
> 
>   
> 0  0 _1
>   1  1  1
> 
>   0  0  0
>   1  1  1
> 
> cr"_1 faces
> 0 0 0
> 0 1 1
> 
> 0 0 0
> 1 0 1
> 
> 0 0 0
> 1 1 0
> 
> 0 0 1
> 1 1 0
> 
> 0 1 0
> 1 0 1
> 
> 1 0 0
> 0 1 1
> 
> DO YOU REMEMBER 
> YOUR ASSIGNMENT?  Write a verb that finds the faces of a box. 
> That 
> is, given a located vector representing the box, find located vectors 
> representing the faces.
> 
> 
>       
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to