Спасибо за оценки и отзывы!
Вы уже оценили.
Приложение для визуализации пространственных кривых и их дифференциально-геометрических величин.
# Приложение «Визуализатор кривых» для Android
**Английский** | [Български](README.bg.md)
Приложение для визуализации пространственных кривых и вычисления их дифференциально-геометрических величин.
## Использование приложения
- Введите `x(t)`, `y(t)`, `z(t)` и интервал `[a, b]`, затем нажмите **Нарисовать**.
- Ползунок перемещает точку вдоль кривой; все величины обновляются для текущего `t`.
- Поворачивайте кривую пальцем. Флажок переключает отображение соприкасающейся окружности.
- Синтаксис (exp4j): `+ - * / ^`, `sin cos tan asin acos atan sinh cosh tanh exp log sqrt abs`, константы `pi` и `e`. Пример: `2*sin(t)^2`.
## Таблица точек
Значок таблицы открывает отдельный экран («PointsActivity») с координатами x(t), y(t), z(t) точек текущей кривой. Установите **t от**, **t до** и **шаг**, затем нажмите **Вычислить**; значения по умолчанию — текущий интервал и 1/10 его длины. Отображается до 2000 точек. Текст можно выделить и скопировать.
## Сохранение кривых
- **Сохранить (значок диска):** сохраняет текущую кривую (x, y, z и интервал) под именем; сохранение под существующим именем перезаписывает её.
- **Мои кривые (значок папки):** отображает список сохраненных кривых. Нажмите на одну, чтобы загрузить и нарисовать её; удерживайте, чтобы удалить.
- Кривые хранятся на устройстве (SharedPreferences) и сохраняются после перезапуска приложения.
## Меню (⋮)
В верхней панели расположены значки «Сохранить» и «Мои кривые», а также «Примеры» и «Язык» (если есть место), и дополнительное меню ⋮ (О программе):
- **Примеры:** спираль, круг, витой куб, кривая Вивиани, трилистниковый узел. Выбор одного из них заполняет поля и отображает кривую.
- **Язык:** Автоматический (системный), Английский, Болгарский, Французский, Немецкий, Испанский.
- **Справка:** краткое описание приложения, ссылки на другие приложения автора и справка для приложения.
## Языки
Интерфейс доступен на английском (по умолчанию), болгарском, французском, немецком и испанском языках. По умолчанию он соответствует языку телефона; меню позволяет выбрать язык вручную (выбор запоминается). Чтобы добавить язык, скопируйте файл `res/values/strings.xml` в `res/values-XX/` (XX — код языка), переведите значения, затем добавьте код в `LANG_CODES` и имя в `setupLanguageSpinner()` в файле `MainActivity.java`.
## Отображаемые величины
| Величина | Формула | Значение |
| **r(t)** | (x(t), y(t), z(t)) | Положение точки |
| **\|r'\|** (скорость) | √(x'² + y'² + z'²) | Скорость вдоль параметризации |
| **s** (длина дуги) | ∫ₐᵗ \|r'(u)\| du | Расстояние, пройденное от a до t (правило Симпсона) |
| **κ** (кривизна) | \|r' × r''\| / \|r'\|³ | Скорость изгиба кривой. Прямая: 0. Окружность радиуса R: 1/R |
| **ρ** (радиус кривизны) | 1/κ | Радиус наилучшей аппроксимирующей окружности. ∞ при κ = 0 |
| **τ** (кручение) | (r' × r'')·r''' / \|r' × r''\|² | Насколько кривая отклоняется от своей плоскости. Плоская кривая: 0. Правосторонняя: τ > 0, левосторонняя: τ < 0 |
| **T** (касательная) | r' / \|r'\| | Единичный вектор вдоль направления движения (красный) |
| **N** (главная нормаль) | B × T | Единичный вектор к центру кривизны (зеленый) |
| **B** (бинормаль) | (r' × r'') / \|r' × r''\| | Перпендикулярно соприкасающейся плоскости (синий) |
| **a_T** | (r'·r'') / \|r'\| | Касательное ускорение: изменение скорости |
| **a_N** | κ·\|r'\|² | Нормальное ускорение: изменение направления. Полное ускорение равно a_T·T + a_N·N |
| **Центр кривизны** | C = r + ρ·N | Центр соприкасающейся окружности |
| **Соприкасающаяся окружность** | лежит в плоскости (T, N), центр C, радиус ρ | Окружность, касающаяся кривой в наивысшем порядке в точке (оранжевый) |
### Плоскости репера
- **Соприкасающаяся плоскость:** образована векторами T и N, вектор нормали B
- **Плоскость нормали:** образована векторами N и B, вектор нормали T
- **Плоскость выпрямления:** образована векторами T и B, вектор нормали N
### Формулы Френе-Серре
(s — длина дуги)
- dT/ds = κ·N
- dN/ds = −κ·T + τ·B
- dB/ds = −τ·N
Кривизна и кручение однозначно определяют кривую с точностью до жесткого движения пространства.
## Принцип работы
r', r'' и r''' вычисляются численно с помощью центральных конечных разностей (шаг H = 10⁻³), затем применяются формулы. Длина дуги определяется по правилу Симпсона (200 интервалов).
Один клик для установки XAPK/APK файлов на Android!