https://github.com/toadharvard/catradar
Like flightradar but with cats
https://github.com/toadharvard/catradar
Last synced: 7 months ago
JSON representation
Like flightradar but with cats
- Host: GitHub
- URL: https://github.com/toadharvard/catradar
- Owner: toadharvard
- License: mit
- Created: 2024-10-14T20:28:18.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-24T19:23:32.000Z (over 1 year ago)
- Last Synced: 2025-01-24T19:31:11.459Z (over 1 year ago)
- Language: Python
- Size: 76.2 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# catradar

Catradar — инструмент для запуска симуляции взаимодействия объектов (далее котов) на ограниченной карте и логгирования их взаимодействия.
## Правила взаимодействия
Взаимодействие котов между собой определяется по следующим правилам:
1. Если два кота находятся на расстоянии не превышающем `R0`, то они пытаются начать драку с вероятностью 1.
2. Если два кота находятся на расстоянии `R1`, там, что `R1 > R0`, они начинают шипеть с вероятностью обратно пропорциональной квадрату расстояния между ними.
3. Если вокруг кота нет соперников он перемещается согласно текущему правилу.
Перемещение котов картой размера `X` на `Y`
## Возможности
На текущий момент приложение:
1. Обрабатывает и отрисовывает более чем 1 миллион котов на карте за 50 мс
2. Логгирует и подсвечивает их взаимодействие
3. Предоставляет три паттерна движения
- Свободное
- Карусельное
- С обработкой столкновений
4. Позволяет влиять на движение посредством курсора
5. Позволяет регулировать следущие параметры без перезапуска симуляции:
- Выбор коэффициента отрисовки
- Установку пресета для начальной позиции
- Выбор паттерна движения
- Изменение скорости движения
- Выбор функции расстояния взаимодействия
6. Возможность осмотреть карту c помощью `WASD`, приблизить и удалиться на `Q` и `E`
7. Ограничение "количество котов меняющих за один период статус не превышает 250" заменено более слабое "количество котов в одной клетке виртуальной сетки карты с ребром `R1` не более `LIMIT`"
8. [Поддержка Metal, OpenGL, Vulkan в качестве бекенда, а так же Mac OS на M1, Intel и Windows и Linux на x86_64](https://docs.taichi-lang.org/docs/hello_world#supported-systems-and-backends)
## Виды движения
### Свободное

Наиболее простая форма движения
### Карусельное

Коты кружат в вальсе, образуя незамысловатые фигуры
### С обработкой столкновений

Если коты наталкиваются друг на друга, то сразу же разбегаются в разные стороны, избегая драки

Клик по области с включенной опцией `Cursor Push` позволяет напугать котов и отолкнуть от себя
## Для разработчиков
### Начальная настройка
```bash
rye sync && rye run pre-commit install
```
### Запуск
```bash
rye run python -m src.catradar
```
### Запуск тестов
```bash
rye test
```
## Использованные инструменты
Для реализации симуляции и GUI был выбран [taichi](https://github.com/taichi-dev/taichi). Вот так авторы описывают свой инструмент:
Taichi Lang is an open-source, imperative, parallel programming language for high-performance numerical computation. It is embedded in Python and uses just-in-time (JIT) compiler frameworks, for example LLVM, to offload the compute-intensive Python code to the native GPU or CPU instructions.
## Лицензия
Код распространяется под лицензией MIT. Подробнее в файле [LICENCE](./LICENCE).