I'm not sure I made it clear that I'd assumed each of BLACK BLUE ... etc
is a numerical triple,  ie 0 0 0 for BLACK, 1 1 1 for WHITE.

So this line should have appeared:
   'BLACK BLUE GREEN CYAN RED MAGENTA YELLOW WHITE'=:#:i.8

Apologies also for using lower case for "blank" in the definition of plan;
I'd forgotten it was a defined global in my workspace.

Here's a slightly modified definition of mycube, with localisation of the
nouns "plan" and "colours":
mycube=: 3 : 0

:

nsteps =. 2 >. <: x

'A B C D H G F E' =. y

BLANK =. < BLACK;BLACK;BLACK;BLACK

FRONT =. < A;B;C;D

BACK =. < H;G;F;E

TOP =. < E;F;B;A

LEFT =. < H;E;A;D

RIGHT =. < F;G;C;B

BASE =. < D;C;G;H

plan =. BASE(<3 1)}FRONT(<2 1)}(LEFT,TOP,RIGHT)1}BACK(<0 1)}4 3$BLANK

colours =. ,/,/>,"_1 each/"1 nsteps mysquarecolours each plan

colours viewmat i.($plan)*nsteps+1

)


It occurs to me that one could specify alternative "nets" to
represent the cube.  You've chosen a cross, but you can also
have a T,  and more generally,  the left and right faces can
roll anywhere up and down their sides;  and of course, we
can tip the whole thing on its side,  or roll the base around
to the left of left or the right of right.... I suppose the
net-shape could be an optional left argument for a dyadic

"cube" verb,  probably easiest to have an arbitrary enumeration
of the net-shapes.

I don't often use JHS,  having got used to JQT.  My problem with sending
messages seems to be a recent feature of my Thunderbird installation.

I hope that helps.  and hope that the code works for you.
If it does, then have a look at this and be very amazed! ....
30 mycube BLACK,BLUE,WHITE,GREEN,RED,YELLOW,CYAN,:MAGENTA


Mike

On 25/06/2015 09:14, Linda Alvord wrote:
Mike, I'm sorry you are having such a problem with the messages.  I have
found that if I run a working program in JHS and then copy the script and
paste in an email, I can eliminate typing errors in the code.  Then in the
email you can write comments around it and not need NB. all the time.


I got your code entered and it ran with no errors. However I tried

Mycube '' and got no result. I'll look at it some more.

Linda

-----Original Message-----
From: programming-boun...@forums.jsoftware.com
[mailto:programming-boun...@forums.jsoftware.com] On Behalf Of Mike Day
Sent: Thursday, June 25, 2015 3:18 AM
To: programm...@jsoftware.com
Subject: Re: [Jprogramming] Trouble making patter for a color cube

I'm still not sure the following got sent yesterday,  so here's a fourth
attempt.
Sorry about the double-line-spacing,
M

On 24/06/2015 15:46, Mike Day wrote:
I've just had a look at the correspondence.

It seems to me that it's better to consider the 8 corners of the cube.
If we specify their colours,  then we merely need to interpolate the
colours along the edges and within the faces.

Here's an attempt to do that, plagiarising blatantly from Raul's
earlier postings. Over to Linda to render the code in basic J.

The 8 corners may indeed use the 8 colours in #:i.8,  but don't need
to do so,  and may use 8 triples of any numbers in [0.0,1.0].

The code follows below, with some comments, and apologies for
line-wraps, line-skips or whatever.

Also apologies for any typos in this patter,

Mike

NB. revision of Raul's colour-mixing verb,  with 4 corner colours
rather than 3 NB. given corner colours ABCD (4x3 array), and x>1 steps
from A to B etc

NB. make an (x+1)x(x+1)x3 array of mixed colours

NB. assumes input colours are in [0,1], but output in [0,255]

msc=:mysquarecolours =: 3 : 0

:

nsteps =. x

'A B C D' =. y

lamda =. (,:~-.)@:(%~ i.@>:) nsteps

AB =. lamda +/@:(*/"1) A,:B NB. mix of colours between corners A & B

CD =. lamda +/@:(*/"1) D,:C NB. mix of colours between corners C & D

1 0 2 |: <.255 * lamda +/@:(*/"1) AB,:CD NB. transpose 'cos I got the
order wrong!

)


NB. Cube layout: A-H label the corners;

NB. (looked ok in the edit window, added ... to
NB.    force spacing!!!)
NB. ..H-G

NB. ..|+|

NB. H-E-F-G sides are AB,BC,...,BF,EA,...FG,GH

NB. |+|+|+| faces are ABCD, DCGH, ... HGFE

NB. D-A-B-C

NB. ..|+|

NB. ..D-C

NB. ..|+|

NB. ..H-G


NB. verb to draw the plan

NB. lhs = number of steps = %: number of facets on a face

NB. rhs = 8 x 3 array of corner colours in range [0,1]

mycube=: 3 : 0

:

nsteps =. 2 >. <: x

'A B C D H G F E' =. y

BLANK =. < BLACK;BLACK;BLACK;BLACK

FRONT =. < A;B;C;D

BACK =. < H;G;F;E

TOP =. < E;F;B;A

LEFT =. < H;E;A;D

RIGHT =. < F;G;C;B

BASE =. < D;C;G;H

plan =: BASE(<3 1)}FRONT(<2 1)}(LEFT,TOP,RIGHT)1}BACK(<0 1)}4 3$blank

colours =: ,/,/>,"_1 each/"1 nsteps mysquarecolours each plan

colours viewmat i.4 3*nsteps+1

)


NB. sample call using all colours in #:i.8

NB. 4 mycube BLACK,BLUE,WHITE,GREEN,RED,YELLOW,CYAN,:MAGENTA


NB. The colours don't have to be all distinct

NB. 3 mycube BLACK,BLUE,WHITE,GREEN,RED,YELLOW,BLUE,:BLACK


On 24/06/2015 07:18, Raul Miller wrote:
A color, for viewmat, the way you are using it, is a sequence of
three integers in the range 0 .. 255.

The problem is that none of the sequences in FRONT nor BASE are valid
colors.

This problem is made more confusing because while BLACK and WHITE are
single valued "colors", the others range from black to white with the
named color appearing in the middle. And then you're using just parts
of those sequences. The grammar may be "simple" but the abstractions
are not.

So... there are several problems to fix here, but the biggest problem
is that your results are not valid colors. If I subtract 255 from
each of the values you have there, they are better, but still not
correct.
Anyways, if I look at the adjacent squares, FRONT should have:

at index 0 (upper left corner):  255 0 0 at index 4 (upper right
corner):  255 0 255 at index 20 (lower left corner):  255 255 0 at
index 24 (lower right corner): 255 255 255

   Similarly, BASE should have:

at index 0: 255 255 0
at index 4: 255 255 255
at index 20: 0 255 0
at index 24: 0 255 255

Instead, you have this:

      0 4 20 24{ FRONT -255
255 255 255
255   0 255
255 255   0
255   0   0
      0 4 20 24{ BASE -255
255 255 255
255 255   0
    0 255 255
    0 255   0

Hopefully this helps...




---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to