# HP Prime for All

English  Русский

Author: Edward Shore (original article)

Tip: The HP Prime screen is 318 pixels wide and 240 pixels deep. If you want to leave room for custom menus, then the canvas is 318 pixels by 218 pixels. The x axis increases to the right, but unlike the Cartesian plane, the y axis increases downward instead of upward.

### DRAW3DCUBE

3D Cube - not as easy as it seems.

EXPORT DRAW3DCUBE()
BEGIN LOCAL t, a, b, c, d, s;
RECT();
// coord
a := 159-50*COS(45°);
b := 109-50*SIN(45°);
c := 159+50*COS(45°) + 1;
d := 159-50*SIN(45°);

// drawing
LINE_P(a+50*COS(45°), b-SIN(45°), a, b);
LINE_P(a, b, 159, 109);
LINE_P(159, 109, c, b);
LINE_P(c, b, a+50*COS(45°), b-SIN(45°));

LINE_P(a, b, a, d);
LINE_P(a, d, 159, 159);
LINE_P(159, 159, 159, 109);

LINE_P(159, 159, c, d);
LINE_P(c, d, c, b);

FOR t FROM b TO d DO LINE_P(a, t, 159, t+50*SIN(45°), #FF0000h);
LINE_P(c, t, 159, t+50*SIN(45°), #FFh);
END;

FOR t FROM 1 TO 50 DO LINE_P(a+t*COS(45°), b-t*SIN(45°),
a+t*COS(45°), b+t*SIN(45°), #FFFF00h);
END;

FOR t FROM 50 DOWNTO 1 DO LINE_P(c-t*COS(45°), b-t*SIN(45°),
c-t*COS(45°), b+t*SIN(45°), #FFFF00h);
END;

WAIT(0);   // I prefer WAIT(0) to FREEZE;

END;


### DRAW3DCYN

My first one I did this weekend. This looks like a tall glass of water.

EXPORT DRAW3DCYN()
BEGIN LOCAL t;
HAngle := 0;
RECT();
// cylinder shell
FOR t FROM 0 TO 100 STEP 1 DO
ARC_P(159, 70+t, 20, 0, π, #7DF9FFh);

ARC_P(159, 70+t, 20, π, 2*π, #1560BDh);
END;
// sides
LINE_P(139, 70, 139, 170, #1560BDh);
LINE_P(179, 70, 179, 170, #1560BDh);
ARC_P(159, 70, 20, 0, 2*π, #1560BDh);
WAIT(0);

END;


### DRAW3DSPH

Sphere. I like the effect the HP Prime does with ARC in a FOR loop.

EXPORT DRAW3DSPH()
BEGIN // 2015-01-22
LOCAL t;
RECT();

// sphere loop
FOR t FROM 100 DOWNTO 1 DO ARC_P(159, 109, t, 0, 2*π, #808080h);
END;

// outside
FOR t FROM 59 TO 259 DO PIXON_P(t, −.0025*t^2+.795*t+70.975);
END;

WAIT(0);

END;


### DRAW3DWAVE

I wanted something to be drawn using a sine wave.

EXPORT DRAW3DWAVE()
BEGIN LOCAL t, a, b;
RECT();
HAngle := 0;

FOR t FROM 0 TO 318 DO a := 25*SIN(3.95168887244ᴇ−2*t-π) + 100;
b := a+25;
PIXON_P(t, a, #FFh);
PIXON_P(t, b, #FFh);

LINE_P(t, a+1, t, b-1, #87CEEBh);
LINE_P(t, b+1, t, 218, #964B00h);

END;

LINE_P(0, 100, 0, 125, #FFh);
LINE_P(318, 100, 318, 125, #FFh);

LINE_P(0, 125, 0, 218, #D4AF37h);
LINE_P(318, 125, 318, 218, #D4AF37h);
LINE_P(0, 218, 318, 218, #D4AF37h);

WAIT(0);

END;


### DRAWSUNSET

This is probably my favorite, since I like sunsets.

EXPORT DRAWSUNSET()
BEGIN
RECT(#87CEEBh);
LOCAL t, a, b;
HAngle := 0;

// sun
FOR t FROM 50 DOWNTO 40 DO ARC_P(159, 109, t, 0, 2*π, #FFA500h);
END;
FOR t FROM 40 DOWNTO 0 DO ARC_P(159, 109, t, 0, 2*π, #FFFF00h);
END;

// horizon
LINE_P(0, 108, 318, 108);

// ground and water
FOR t FROM 0 TO 159 DO a := 1.855525955687ᴇ−4*t^3
-5.05717802449ᴇ−2*t^2
+3.67070350319*t+109;
LINE_P(t, a, t, 109, #80h);
LINE_P(t, a+1, t, 242, #964B00h);
END;

FOR t FROM 159 TO 318 DO a := 1.23858063728ᴇ−4*t^3
-9.61799073419ᴇ−2*t^2
+23.6382711212*t
-1664.83052851;
LINE_P(t, a, t, 109, #80h);
LINE_P(t, a+1, t, 242, #964B00h);
END;

// lines
LINE_P(120, 111, 188, 111, #C0C0C0h);
LINE_P(125, 113, 183, 113, #C0C0C0h);
LINE_P(130, 115, 178, 115, #C0C0C0h);
LINE_P(135, 117, 173, 117, #C0C0C0h);

WAIT(0);
END;