#include "stdafx.h" #include "generatorMove.hpp" #include #include int tomoMotionGeometry( int flag, float rstPos, float accDst, float brkDst, float latDst, float susDst, float SID, float v, int NProj, float scanAngle, float AngPerMot, float kvAng, float& warmAngle, float& AnglePerSec, float* Seq, int* NCount, int* Period, int& Nsec, int& NSeqLen) { int N = NProj - 1; float perSec = scanAngle / N; float setAng = N * perSec; float pi = atan(1.0f) * 4; float start = rstPos + tan(setAng / 2 * pi / 180) * SID; if (SID < (1.0 - 0.5) || abs(setAng / 2) > 30 || flag == 0) { return -1; } warmAngle = scanAngle; if (flag == 1) { Seq[2] = start; Seq[1] = Seq[2] + latDst; Seq[0] = Seq[1] + accDst; if ((N % 2) == 0) { for (int i = 1; i <= (N / 2); ++i) { Seq[N / 2 - i - 1 + 3] = rstPos + SID * tan(((i)* perSec) * pi / 180); } Seq[3 + N / 2 - 1] = rstPos; for (int i = 0; i < (N / 2); ++i) { Seq[3 + N / 2 + i] = 2 * rstPos - Seq[2 + N / 2 - i - 1]; } } else { float alpha = perSec / 2.0f; int halfCount = (int)floor(N / 2); for (int i = 0; i < halfCount + 1; ++i) { Seq[halfCount - i - 1 + 3] = rstPos + SID * tan(((2 * i + 1) * alpha) * pi / 180); } for (int i = 0; i < halfCount + 1; ++i) { Seq[3 + halfCount + i] = 2 * rstPos - Seq[2 + halfCount - i]; } } Seq[3 + N] = Seq[2 + N] - susDst; Seq[4 + N] = Seq[3 + N] - brkDst; for (int i = 0; i < N; ++i) { NCount[i] = (int)(perSec / AngPerMot); float hi = abs(Seq[2 + i] - Seq[2 + i + 1]); int NTReslution = (int)floor(kvAng * (1e+6 * AngPerMot) * hi / (v * perSec)); Period[i] = NTReslution; } AnglePerSec = perSec; Nsec = N; NSeqLen = Nsec + 5; } return 0; }