Programming the HP 40gs Graphing Calculator
Listings of programs I have written some years ago for the HP 40gs calculator:
Helmert Transformation (2D)
A small program to transform coordinates from a source system
(y
, x
) to a target system (Y
,
X
).
Input:
- identical points (
y
,x
) in source system inC1
,C2
- identical points (
Y
,X
) in target system inC3
,C4
(number of identical points n >= 2) - points to transform (
y
,x
) in source system inC5
,C6
Output:
- parameters
o
,a
- scale
m
- variances
WY
,WX
- standard deviation
s
- transformed points (
Y
,X
) in target system inC7
,C8
Source Code
ERASE:
DISP 1; "Helmert Transformation":
SELECT Statistics:
SIZE(C1) ▶ N:
SIZE(C5) ▶ P:
MAKELIST(0, A, 1, N, 1) ▶ L1:
L1 ▶ L2:
L1 ▶ L3:
L1 ▶ L4:
L1 ▶ L5:
L1 ▶ L6:
MAKELIST(0, A, 1, P, 1) ▶ C7:
C7 ▶ C8:
ΣLIST(C1) / N ▶ C:
ΣLIST(C2) / N ▶ D:
ΣLIST(C3) / N ▶ E:
ΣLIST(C4) / N ▶ F:
FOR I = 1 TO N;
C1(I) - C ▶ L1(I):
C2(I) - D ▶ L2(I):
C3(I) - E ▶ L3(I):
C4(I) - F ▶ L4(I):
END
FOR I = 1 TO N;
L2(I) * L3(I) - L1(I) * L4(I) ▶ L5(I):
L2(I)² + L1(I)² ▶ L6(I):
END:
ΣLIST(L5) / ΣLIST(L6) ▶ O:
DISP 1; "o=" O:
FOR I = 1 TO N;
L2(I) * L4(I) + L1(I) * L3(I) ▶ L5(I):
END:
ΣLIST(L5) / ΣLIST(L6) ▶ A:
DISP 2; "a=" A:
E - A * C - O * D ▶ Y:
F - A * D + O * C ▶ X:
√(A² + O²) ▶ M:
DISP 3; "m=" M;
0 ▶ V:
0 ▶ W:
FOR I = 1 TO N;
-Y - A * C1(I) - O * C2(I) + C3(I) ▶ L5(I):
-X - A * C2(I) + O * C1(I) + C4(I) ▶ L6(I):
V + L5(I)² ▶ V:
W + L6(I)² ▶ W:
END:
DISP 4; "WY=" ΣLIST(L5) " WX=" ΣLIST(L6):
√((V + W) / (2 * N - 4)) ▶ S:
DISP 5; "s=" S * 1000 "mm":
DISP 7; "Writing to C7/C8...":
FOR I = 1 TO P;
Y + A * C5(I) + O * C6(I) ▶ C7(I):
X + A * C6(I) - O * C5(I) ▶ C8(I):
END:
DISP 7; "Done.":
CLRVAR L1: CLRVAR L2:
CLRVAR L3: CLRVAR L4:
CLRVAR L5: CLRVAR L6:
FREEZE:
References
- Franz Josef Gruber, Rainer Jockel: Formelsammlung für das Vermessungswesen (Teubner, 2007)
Normalised Euler Spiral
A tiny program to calculate the arc point coordinates of a normalised
Euler spiral with respect to the arc length L
.
Input:
- arc length
L
Output:
- coordinates of arc point
Source Code
ERASE:
DISP 1; "Normalised Euler spiral":
0 ▶ J:
-1 ▶ K:
PROMPT L:
L ▶ A:
A ▶ X:
0 ▶ Y:
DO
J + 2 ▶ J:
-K ▶ K:
A * L * L * (J - 1) / (J * (J + 1)) ▶ A:
IF K < 0 THEN
-A ▶ A:
X + A ▶ X:
ELSE
Y + A ▶ Y:
END:
UNTIL
ABS(A) < .5 * 10^-7
END:
ERASE:
DISP 1; "Arc point":
DISP 2; "X: " X:
DISP 3; "Y: " Y:
CLRVAR J: CLRVAR K:
CLRVAR L: CLRVAR A:
CLRVAR X: CLRVAR Y:
FREEZE: