Thanks for your rating and feedback!
You have already rated.
An app for visualizing space curves and their differential-geometric quantities.
# App Curve Visualizer for Android
**English** | [Български](README.bg.md)
An app for visualizing space curves and computing their differential-geometric quantities.
## Using the app
- Enter `x(t)`, `y(t)`, `z(t)` and an interval `[a, b]`, then tap **Draw**.
- The slider moves the point along the curve; all quantities update for the current `t`.
- Rotate the curve with your finger. The checkbox toggles the osculating circle.
- Syntax (exp4j): `+ - * / ^`, `sin cos tan asin acos atan sinh cosh tanh exp log sqrt abs`, constants `pi` and `e`. Example: `2*sin(t)^2`.
## Points table
The table icon opens a separate screen (`PointsActivity`) with the coordinates x(t), y(t), z(t) of points of the current curve. Set **t from**, **t to** and the **step**, then tap **Compute**; the defaults are the current interval and 1/10 of its length. Up to 2000 points are shown. The text is selectable, so it can be copied.
## Saving curves
- **Save (disk icon):** stores the current curve (x, y, z and interval) under a name; saving with an existing name overwrites it.
- **My curves (folder icon):** lists saved curves. Tap one to load and draw it; long-press to delete.
- Curves are kept on the device (SharedPreferences) and survive app restarts.
## 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.
## 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).
One-click to install XAPK/APK files on Android!