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.

Screen DRAW3DCUBE

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);

// left/right side shade
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;

// top shade
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.

Screen DRAW3DCYN

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.

Screen DRAW3DSPH

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.

Screen DRAW3DWAVE

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.

Screen DRAWSUNSET

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;

Comments