Post Reply 
DRAWICON4: 4 x 4 Pixel Picture drawn by Number
12-29-2013, 12:39 AM (This post was last modified: 12-29-2013 01:19 AM by Eddie W. Shore.)
Post: #1
DRAWICON4: 4 x 4 Pixel Picture drawn by Number
Drawing Iconic Pictures with the HP Prime

4 x 4 Pixels: DRAWICON4(number)

Entry: Real number, integer

The number is ultimately converted into a binary number, with each of the 16 bits fitting a 4 x 4 matrix. If the square is turned "on" (having a value of 1), a square will be drawn. Each space if the matrix represents a binary bit: 2^0, 2^1, 2^2, 2^3, etc. The lowest value bit is located at the bottom, right-hand corner element of the matrix.

You can specify whether the squares will be drawn in black or a specific color. The 4 x 4 matrix of bits is represented as this:

[ [ 2^15, 2^14, 2^13, 2^12 ],
[ 2^11, 2^10, 2^9, 2^8 ],
[ 2^7, 2^6, 2^5, 2^4 ],
[ 2^3, 2^2, 2^1, 2^0 ] ]

Program:

Comments followed by // are for notes and do not necessarily have to be typed.

EXPORT DRAWICON4(m)
BEGIN
// EWS 12/28/2013

// does the user want color?
LOCAL ch, R, G, B;
CHOOSE(ch,"Color?","Black","Yes");
IF ch==1 THEN
ch:=RGB(0,0,0);
ELSE
INPUT({R,G,B}, "Color Input",
{"Red","Green","Blue"},{ },{0,0,0});
ch:=RGB(R,G,B);
END;

// convert m to real to be broken down
// Type 1 is an integer (#)
IF TYPE(m)==1 THEN
m:=B→R(m);
END;

// remove negation and fraction parts (so entries like -12 and 34.55 are acceptable)
m:=ABS(IP(m));

// allow m to be text by storing it in M
LOCAL M:=m;

// check for upper limit
IF m>65535 THEN
MSGBOX("Excess of 65535!");
KILL;
END;

// break m into its binary parts and puts them in the required order
LOCAL n:=15,r,c,
mat:=MAKELIST(0,X,1,16);

REPEAT
IF 2^n≤m THEN
m:=m-2^n;
mat(n+1):=1;
END;
n:=n-1;
UNTIL n<0;
mat:=REVERSE(mat);

// list2mat(list, number of columns) - found in the catalog
mat:=list2mat(mat,4);

// drawing a border and label
RECT();
RECT_P(129,79,189,139,RGB(0,0,255),
RGB(255,255,255));
TEXTOUT_P(M,139,0,4,RGB(0,128,0));

// use the matrix to draw the squares
// pixels x = columns, y = rows
FOR r FROM 1 TO 4 DO
FOR c FROM 1 TO 4 DO

IF mat(r,c)==1 THEN
RECT_P(129+15*(c-1), 79+15*(r-1),
129+15*c, 79+15*r, ch);
END;
END;
END;

WAIT(0);

END;

Link to pictures and a 6 x 6 version:
http://edspi31415.blogspot.com/2013/12/h...tures.html
Visit this user's website Find all posts by this user
Quote this message in a reply
Post Reply 




User(s) browsing this thread: 2 Guest(s)