std::vector< std::pair< size_t, size_t > > testPairs;
testPairs.resize(0);
- for (size_t i = 0; i < 27; i++) {
+ for (size_t i {0}; i < 27; i++) {
testFrame1.push_back(x1 * static_cast< float >(i % 3) + y1 * static_cast< float >((i % 9) / 3) + z1 * static_cast< float >(i / 9));
testFrame2.push_back(x2 * static_cast< float >(i % 3) + y2 * static_cast< float >((i % 9) / 3) + z2 * static_cast< float >(i / 9));
testPairs.push_back(std::make_pair(i, i));
ApplyFit(testFrame3, {2, 4, 8}, {M_PI / 6, M_PI / 6, M_PI / 6});
CalcMid(testFrame1, testFrame3, mid1, mid2, testPairs);
ASSERT_NEAR((mid1 - mid2).norm(), 0., 0.000001);
- double testF = 0;
- for (size_t i = 0; i < testFrame1.size(); i++) {
+ double testF {0};
+ for (size_t i {0}; i < testFrame1.size(); i++) {
testF += F(testFrame1[i].toDVec(), testFrame3[i].toDVec(), angl);
}
ASSERT_NEAR(testF, 0., 0.000001);
std::vector< std::pair< size_t, size_t > > testPairs;
testPairs.resize(0);
- for (size_t i = 0; i < 27; i++) {
+ for (size_t i {0}; i < 27; i++) {
testFrame1.push_back(x1 * static_cast< float >(i % 3) + y1 * static_cast< float >((i % 9) / 3) + z1 * static_cast< float >(i / 9));
testFrame2.push_back(x2 * static_cast< float >(i % 3) + y2 * static_cast< float >((i % 9) / 3) + z2 * static_cast< float >(i / 9));
testPairs.push_back(std::make_pair(i, i));
MyFitNew(fr1, fr2, testPairs, prc);
tF = 0;
DVec angl(0., 0., 0.);
- for (size_t i = 0; i < fr1.size(); i++) {
+ for (size_t i {0}; i < fr1.size(); i++) {
tF += F(fr1[i].toDVec(), fr2[i].toDVec(), angl);
}
}
* optimal 3x3x3 cubes fitting
*/
- for (size_t i = 0; i < 27; i++) {
+ for (size_t i {0}; i < 27; i++) {
testFrame1.push_back(x1 * static_cast< float >(i % 3) + y1 * static_cast< float >((i % 9) / 3) + z1 * static_cast< float >(i / 9));
testFrame2.push_back(testFrame1.back() + a);
testPairs.push_back(std::make_pair(i, i));
}
- double testF = 0;
+ double testF {0};
myFitNewRoutine(testFrame1, testFrame2, testPairs, 0.000'001, testF);
ASSERT_NEAR(testF, 0, 0.000'001);
testFrame1.resize(0);
testFrame2.resize(0);
- for (size_t i = 0; i < 27; i++) {
+ for (size_t i {0}; i < 27; i++) {
testFrame1.push_back(x2 * static_cast< float >(i % 3) + y2 * static_cast< float >((i % 9) / 3) + z2 * static_cast< float >(i / 9));
testFrame2.push_back(x3 * static_cast< float >(i % 3) + y3 * static_cast< float >((i % 9) / 3) + z3 * static_cast< float >(i / 9));
}
std::vector< RVec > testRef;
testRef.resize(0);
- RVec testA, testB;
- testA[0] = 0; testA[1] = 0; testA[2] = 0;
- testB[0] = 1; testB[1] = 1; testB[2] = 1;
- for (size_t i = 0; i < 100; i++) {
+ RVec testA(0., 0., 0.), testB(1., 1., 1.);
+ for (size_t i {0}; i < 100; i++) {
testIndex.push_back(i);
testRef.push_back(testA + testB * static_cast< float >(i));
}
- int testWindowSize = 500;
- int testDomainMinimumSize = 5;
- int testDomainSearchAlgorythm = 1;
- int testTimeStepBetweenWindows = 100;
- size_t testSliceNum = testIndex.size() - testDomainMinimumSize + 1;
- double testEpsilon = 1.5;
- double testDelta = 0.98;
- std::string testOutPutFileName = "testString";
+ int testWindowSize {500};
+ int testDomainMinimumSize {5};
+ int testDomainSearchAlgorythm {1};
+ int testTimeStepBetweenWindows {100};
+ size_t testSliceNum {testIndex.size() - testDomainMinimumSize + 1};
+ double testEpsilon {1.5};
+ double testDelta {0.98};
+ std::string testOutPutFileName {"testString"};
testDomain.setDefaults(testIndex, testRef, testWindowSize, testDomainMinimumSize, testDomainSearchAlgorythm, testTimeStepBetweenWindows, testSliceNum, testEpsilon, testDelta, testOutPutFileName);
ASSERT_EQ(testDomain.graph.size(), 0);
ASSERT_EQ(testDomain.structIndex, testIndex);
- ASSERT_EQ(testDomain.ref.size(), testRef.size());
- for (size_t i = 0; i < testRef.size(); i++) {
- ASSERT_EQ(testDomain.ref[i][0], testRef[i][0]);
- ASSERT_EQ(testDomain.ref[i][1], testRef[i][1]);
- ASSERT_EQ(testDomain.ref[i][2], testRef[i][2]);
- //ASSERT_EQ(testDomain.ref[i], testRef[i]); not working probably due to std::vector< ->float[3]<- > frame;
+ ASSERT_EQ(testDomain.refTable.size(), testRef.size());
+ for (size_t j {0}; j < testRef.size(); j++) {
+ for (size_t i {0}; i < testRef.size(); i++) {
+ ASSERT_NEAR(testDomain.refTable[j][i].norm(), (testRef[i] - testRef[j]).norm(), 0.000'01);
+ }
}
- //ASSERT_EQ(testDomain.ref, testRef); not working
ASSERT_EQ(testDomain.eps, testEpsilon);
ASSERT_EQ(testDomain.dlt, testDelta);
testTraj2.resize(0);
testTraj3.resize(0);
RVec testA(1, 2, 3), testB(1, 0, 0), testC(0, 1, 0);
- for (size_t i0 = 0; i0 < 1000; i0++) {
+ for (size_t i0 {0}; i0 < 1000; i0++) {
testTraj1.resize(testTraj1.size() + 1);
testTraj2.resize(testTraj2.size() + 1);
testTraj3.resize(testTraj3.size() + 1);
- for (size_t i1 = 0; i1 < 10; i1++) {
+ for (size_t i1 {0}; i1 < 10; i1++) {
testTraj1.back().push_back(static_cast< float >(i1) * testA + static_cast< float >(i0) * testB);
testTraj2.back().push_back(static_cast< float >(i1) * testA + static_cast< float >(i0) * testB);
testTraj3.back().push_back(static_cast< float >(i1) * testA + static_cast< float >(i0) * testB + static_cast< float >(i0) * testC);
}
- for (size_t i1 = 0; i1 < 10; i1++) {
+ for (size_t i1 {0}; i1 < 10; i1++) {
testTraj1.back().push_back(static_cast< float >(i1) * testA - static_cast< float >(i0) * testB);
testTraj2.back().push_back(static_cast< float >(i1) * testA + static_cast< float >(i0) * testC);
testTraj3.back().push_back(static_cast< float >(i1) * testA + static_cast< float >(i0) * testB - static_cast< float >(i0) * testC);
testIndex.resize(0);
std::vector< RVec > testRef;
testRef.resize(0);
- for (size_t i = 0; i < 20; i++) {
+ for (size_t i {0}; i < 20; i++) {
testIndex.push_back(i);
testRef.push_back(static_cast< float >(i % 10) * testA);
}
- int testWindowSize = 500;
- int testDomainMinimumSize = 4;
- int testDomainSearchAlgorythm = 0;
- int testTimeStepBetweenWindows = 100;
- size_t testSliceNum = testIndex.size() - testDomainMinimumSize + 1;
- double testEpsilon = 1.5;
- double testDelta = 0.98;
- std::string testOutPutFileName1 = "testString1.ndx", testOutPutFileName2 = "testString2.ndx", testOutPutFileName3 = "testString3.ndx";
+ int testWindowSize {500};
+ int testDomainMinimumSize {4};
+ int testDomainSearchAlgorythm {0};
+ int testTimeStepBetweenWindows {100};
+ size_t testSliceNum {testIndex.size() - testDomainMinimumSize + 1};
+ double testEpsilon {1.5};
+ double testDelta {0.98};
+ std::string testOutPutFileName1 {"testString1.ndx"}, testOutPutFileName2 {"testString2.ndx"}, testOutPutFileName3 {"testString3.ndx"};
domainType testDomain1, testDomain2, testDomain3;
testDomain1.setDefaults(testIndex, testRef, testWindowSize, testDomainMinimumSize, testDomainSearchAlgorythm, testTimeStepBetweenWindows, testSliceNum, testEpsilon, testDelta, testOutPutFileName1);
testDomain3.setDefaults(testIndex, testRef, testWindowSize, testDomainMinimumSize, testDomainSearchAlgorythm, testTimeStepBetweenWindows, testSliceNum, testEpsilon, testDelta, testOutPutFileName3);
std::vector< std::vector< RVec > > testTemp1, testTemp2, testTemp3;
- for (size_t i = 0; i < 1000; i++) {
+ for (size_t i {0}; i < 1000; i++) {
testTemp1.resize(0);
testTemp2.resize(0);
testTemp3.resize(0);
testRef.resize(0);
RVec testA(0, 0, 0), testB(1, 1, 1);
- for (size_t i = 0; i < 100; i++) {
+ for (size_t i {0}; i < 100; i++) {
testIndex.push_back(i);
testRef.push_back(testA + testB * static_cast< float >(i));
}
- int testWindowSize = 100;
- int testDomainMinimumSize = 5;
- int testDomainSearchAlgorythm = 0;
- int testTimeStepBetweenWindows = 100;
- size_t testSliceNum = testIndex.size() - testDomainMinimumSize + 1;
- double testEpsilon = 1.5;
- double testDelta = 0.98;
- std::string testOutPutFileName = "testString";
+ int testWindowSize {100};
+ int testDomainMinimumSize {5};
+ int testDomainSearchAlgorythm {0};
+ int testTimeStepBetweenWindows {100};
+ size_t testSliceNum {testIndex.size() - testDomainMinimumSize + 1};
+ double testEpsilon {1.5};
+ double testDelta {0.98};
+ std::string testOutPutFileName {"testString"};
testDomain.setDefaults(testIndex, testRef, testWindowSize, testDomainMinimumSize, testDomainSearchAlgorythm, testTimeStepBetweenWindows, testSliceNum, testEpsilon, testDelta, testOutPutFileName);
testDomain.graph.resize(1);
testDomain.graph.front().resize(testSliceNum);
- for (size_t i1 = 0; i1 < testSliceNum; i1++) {
+ for (size_t i1 {0}; i1 < testSliceNum; i1++) {
testDomain.setGraph(testDomain.graph.front()[i1]);
- for (size_t i2 = 0; i2 < testIndex.size(); i2++) {
- for (size_t i3 = 0; i3 < testIndex.size(); i3++) {
+ for (size_t i2 {0}; i2 < testIndex.size(); i2++) {
+ for (size_t i3 {0}; i3 < testIndex.size(); i3++) {
testDomain.graph.front()[i1][i2][i3].num = 4;
}
}
testDomain.getDomains();
ASSERT_EQ(testDomain.domains.size(), 0);
- for (int i0 = 0; i0 < 3; i0++) {
+ for (int i0 {0}; i0 < 3; i0++) {
testDomain.graph.resize(1);
testDomain.graph.front().resize(testSliceNum);
- for (size_t i1 = 0; i1 < testSliceNum; i1++) {
+ for (size_t i1 {0}; i1 < testSliceNum; i1++) {
testDomain.setGraph(testDomain.graph.front()[i1]);
- for (size_t i2 = 0; i2 < testIndex.size(); i2++) {
- for (size_t i3 = 0; i3 < testIndex.size(); i3++) {
+ for (size_t i2 {0}; i2 < testIndex.size(); i2++) {
+ for (size_t i3 {0}; i3 < testIndex.size(); i3++) {
testDomain.graph.front()[i1][i2][i3].num = 100;
}
}
const std::string outPutFileName) {
graph.resize(0);
structIndex = index;
- ref = reference;
+ refTable.resize(reference.size());
+ for (size_t i {0}; i < reference.size(); i++) {
+ refTable[i].resize(0);
+ for (size_t j {0}; j < reference.size(); j++) {
+ refTable[i].push_back(reference[i] - reference[j]);
+ }
+ }
// слава шиве, слава индусам... зачем столько ифов?
if (epsilon != -1) { eps = epsilon; }
if (delta != -1) { dlt = delta; }
// фукнция обновления данных для выделения структурных доменов
void domainType::update(const std::vector< std::vector< RVec > > &frame, const int frameNumber) {
// громакс считает с нуля, проверял; инициализируем новое "окно"
- if ((frameNumber + 1) % ts == 1) {
+ if (frameNumber % ts == 0) {
graph.resize(graph.size() + 1);
graph.back().resize(structIndex.size() - static_cast< size_t >(dms) + 1);
- for (size_t i {0}; i < graph.front().size(); i++) {
- setGraph(graph.back()[i]);
+ for (auto &i : graph.back()) {
+ setGraph(i);
}
}
// заполняем структуру данных для структурных доменов
- for (size_t i {0}; i < graph.size(); i++) {
+ for (auto &i : graph) {
#pragma omp parallel for
- for (size_t j = 0; j < graph.front().size(); j++) {
- for (size_t k1 {0}; k1 < graph[i][j].size(); k1++) {
- for (size_t k2 {k1}; k2 < graph[i][j].size(); k2++) {
- if ((frame[j][k1] - frame[j][k2] - graph[i][j][k1][k2].radius).norm() <= static_cast< float >(eps)) {
+ for (size_t j = 0; j < i.size(); j++) {
+ for (size_t k1 {0}; k1 < i[j].size(); k1++) {
+ for (size_t k2 {k1}; k2 < i[j].size(); k2++) {
+ if ((frame[j][k1] - frame[j][k2] - refTable[k1][k2]).norm() <= static_cast< float >(eps)) {
if (k1 != k2) {
- graph[i][j][k1][k2].num++;
- graph[i][j][k2][k1].num++;
+ i[j][k1][k2].num++;
+ i[j][k2][k1].num++;
} else {
- graph[i][j][k1][k2].num++;
+ i[j][k1][k2].num++;
}
}
}
}
// инициализация матриц соотношений в структуре
-void domainType::setGraph(std::vector< std::vector< triple > > &smallGraph) {
+void domainType::setGraph(std::vector< std::vector< node > > &smallGraph) {
smallGraph.resize(0);
- smallGraph.resize(ref.size());
- for (size_t i {0}; i < ref.size(); i++) {
+ smallGraph.resize(refTable.size());
+ for (size_t i {0}; i < refTable.size(); i++) {
smallGraph[i].resize(0);
- smallGraph[i].resize(ref.size());
- for (size_t j {0}; j < ref.size(); j++) {
+ smallGraph[i].resize(refTable.size());
+ for (size_t j {0}; j < refTable.size(); j++) {
smallGraph[i][j].num = 0;
- smallGraph[i][j].radius = ref[i] - ref[j];
smallGraph[i][j].check = false;
}
}
// подсчёт размеров всех потенциально возможных доменов и проверка на наличие домена для выделения
bool domainType::searchDomainSizes() {
bool flag {false};
- domsizes.resize(0);
- domsizes.resize(graph.front().size());
for (size_t i {0}; i < graph.front().size(); i++) {
domsizes[i].resize(0); // необходимо переопределять память
domsizes[i].resize(graph.front()[i].size(), 0);