/
otec_infi_666
/
PROGRAMKI
Обзор
Документация
Войти
/
otec_infi_666
/
PROGRAMKI
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
VI.cpp
80 строк
2 KB
otec_infi_666
Create: VI.cpp
26 июл 2026, 22:57
Верифицирован
26 июл 2026, 22:57
a890dd9
Код
Авторство
О чём код?
#include <iostream> #include <fstream> #include <vector> #include <string> #include <iomanip> using namespace std; struct SensorData { double time; double wx; double wy; double wz; }; vector<SensorData> applyMovingAverage(const vector<SensorData>& data, size_t windowSize) { vector<SensorData> result; if (data.empty() || windowSize == 0) { return result; } result.reserve(data.size()); double sum_wx = 0.0, sum_wy = 0.0, sum_wz = 0.0; size_t currentWindowElements = 0; for (size_t i = 0; i < data.size(); ++i) { sum_wx += data[i].wx; sum_wy += data[i].wy; sum_wz += data[i].wz; currentWindowElements++; if (currentWindowElements > windowSize) { sum_wx -= data[i - windowSize].wx; sum_wy -= data[i - windowSize].wy; sum_wz -= data[i - windowSize].wz; currentWindowElements--; } SensorData avgData; avgData.time = data[i].time; avgData.wx = sum_wx / currentWindowElements; avgData.wy = sum_wy / currentWindowElements; avgData.wz = sum_wz / currentWindowElements; result.push_back(avgData); } return result; } int main() { string inputFilename = "IMU.txt"; string outputFilename = "result.txt"; ifstream inputFile(inputFilename); if (!inputFile.is_open()) { return 666; } string dummyLine; getline(inputFile, dummyLine); getline(inputFile, dummyLine); vector<SensorData> rawData; double t, ax, ay, az, wx, wy, wz; vector<double> psi, gamma, teta; while (inputFile >> t >> ax >> ay >> az >> wx >> wy >> wz) { rawData.push_back({ t, wx, wy, wz }); } inputFile.close(); cout << "Считано строк: " << rawData.size() << "\n"; size_t windowSize = 100; vector<SensorData> smoothedData = applyMovingAverage(rawData, windowSize); for (size_t i = 0; i < rawData.size(); ++i) { psi[i] = atan(rawData[i].wz / rawData[i].wx); gamma[i] = atan(rawData[i].wz / rawData[i].wy); teta[i] = atan(rawData[i].wx / rawData[i].wy); } return 0; }