## 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 in`C1`

,`C2`

- identical points (
`Y`

,`X`

) in target system in`C3`

,`C4`

(number of identical points n >= 2) - points to transform (
`y`

,`x`

) in source system in`C5`

,`C6`

Output:

- parameters
`o`

,`a`

- scale
`m`

- variances
`WY`

,`WX`

- standard deviation
`s`

- transformed points (
`Y`

,`X`

) in target system in`C7`

,`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:
```