## Menu (⋮)
The top bar has icons for Save and My curves, plus Examples and Language (if there is room), and a ⋮ overflow menu (About):
- **Examples:** helix, circle, twisted cubic, Viviani's curve, trefoil knot. Picking one fills in the fields and draws it.
- **Language:** Auto (system), English, Български, Français, Deutsch, Español.
- **Help:** a short description of the app, links to the of author's other apps and help for app.
## Languages
The UI is available in English (default), Bulgarian, French, German and Spanish. By default it follows the phone language; the menu lets you pick a language manually (the choice is remembered). To add a language, copy `res/values/strings.xml` to `res/values-XX/` (XX is the language code), translate the values, then add the code to `LANG_CODES` and the name to `setupLanguageSpinner()` in `MainActivity.java`.
## Displayed quantities
| Quantity | Formula | Meaning |
| **r(t)** | (x(t), y(t), z(t)) | Position of the point |
| **\|r'\|** (speed) | √(x'² + y'² + z'²) | Speed along the parametrization |
| **s** (arc length) | ∫ₐᵗ \|r'(u)\| du | Distance travelled from a to t (Simpson's rule) |
| **κ** (curvature) | \|r' × r''\| / \|r'\|³ | How fast the curve bends. Line: 0. Circle of radius R: 1/R |
| **ρ** (radius of curvature) | 1/κ | Radius of the best-fitting circle. ∞ when κ = 0 |
| **τ** (torsion) | (r' × r'')·r''' / \|r' × r''\|² | How much the curve leaves its plane. Planar curve: 0. Right-handed: τ > 0, left-handed: τ < 0 |
| **T** (tangent) | r' / \|r'\| | Unit vector along the direction of motion (red) |
| **N** (principal normal) | B × T | Unit vector towards the center of curvature (green) |
| **B** (binormal) | (r' × r'') / \|r' × r''\| | Perpendicular to the osculating plane (blue) |
| **a_T** | (r'·r'') / \|r'\| | Tangential acceleration: change of speed |
| **a_N** | κ·\|r'\|² | Normal acceleration: change of direction. Total acceleration is a_T·T + a_N·N |
| **Center of curvature** | C = r + ρ·N | Center of the osculating circle |
| **Osculating circle** | lies in the (T, N) plane, center C, radius ρ | The circle that touches the curve to the highest order at the point (orange) |
### Planes of the frame
- **Osculating plane:** spanned by T and N, normal vector B
- **Normal plane:** spanned by N and B, normal vector T
- **Rectifying plane:** spanned by T and B, normal vector N
### Frenet-Serret formulas
(s is arc length)
- dT/ds = κ·N
- dN/ds = −κ·T + τ·B
- dB/ds = −τ·N
Curvature and torsion determine a curve uniquely up to a rigid motion of space.
## Examples
| Curve | x(t) | y(t) | z(t) | [a, b] | Expected |
| Helix | `cos(t)` | `sin(t)` | `t` | 0 … 12.566 | κ = τ = 0.5 |
| Circle | `cos(t)` | `sin(t)` | `0` | 0 … 6.283 | κ = 1, τ = 0 |
| Twisted cubic | `t` | `t^2` | `t^3` | -2 … 2 | κ, τ ≠ 0 |
| Viviani's curve | `1+cos(t)` | `sin(t)` | `2*sin(t/2)` | 0 … 12.566 | closed curve |
| Trefoil knot | `sin(t)+2*sin(2*t)` | `cos(t)-2*cos(2*t)` | `-sin(3*t)` | 0 … 6.283 | torsion changes sign |
## How it works
r', r'' and r''' are computed numerically with central finite differences (step H = 10⁻³), then the formulas are applied. Arc length uses Simpson's rule (200 intervals).
## Limitations
- Where r' × r'' = 0 (straight segments, inflection points), τ is undefined and shows "—" or a very large value, and ρ is ∞.
- Numerical derivatives are approximate (about 4-6 digits). Very sharp curves give larger errors.
- Points where r' = 0 are singular and the frame is undefined.