536{
537 Point2D p1, s1, p2, s2, di, dj;
541
542 for (size_t i = 0; i < nPanelsP; ++i)
543 {
544 std::array<int, 2> vecV = { ((int)i - 1 >= 0) ? int(i - 1) : int(nPanelsP - 1), (i + 1 < nPanelsP) ? int(i + 1) : 0 };
545 for (int j : vecV)
546 {
547 p1 = aflP.
getR(i + 1) - aflP.
getR(j + 1);
548 s1 = aflP.
getR(i + 1) - aflP.
getR(j);
549 p2 = aflP.
getR(i) - aflP.
getR(j + 1);
551 di = aflP.
getR(i + 1) - aflP.
getR(i);
552 dj = aflP.
getR(j + 1) - aflP.
getR(j);
553
554 alpha = { \
557 (aflP.isAfter(i, j)) ? 0.0 :
VMlib::
Alpha(p1, p2) \
558 };
559
560 lambda = { \
563 (aflP.isAfter(i, j)) ? 0.0 :
VMlib::
Lambda(p1, p2) \
564 };
565
566 v00 = {
570 };
571
572 i00 =
IDPI / di.
length() * (-(alpha[0] * v00[0] + alpha[1] * v00[1] + alpha[2] * v00[2]).kcross() \
573 + (lambda[0] * v00[0] + lambda[1] * v00[1] + lambda[2] * v00[2]));
574
579
581
587
588 i11 = (
IDPI / di.
length()) * ((alpha[0] + alpha[2]) * v11[0] + (alpha[1] + alpha[2]) * v11[1] + alpha[2] * v11[2]\
589 + ((lambda[0] + lambda[2]) * v11[0] + (lambda[1] + lambda[2]) * v11[1] + lambda[2] * v11[2] \
592 prec1[i] = (i11) * (1.0 / dj.
length());
594 prea1[i] = (i11) * (1.0 / dj.
length());
595 }
596 }
597 }
598}
const Point2D & getR(size_t q) const
Возврат константной ссылки на вершину профиля
bool isAfter(size_t i, size_t j) const
Проверка, идет ли вершина i следом за вершиной j.
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив,...
numvector< T, 2 > kcross() const
Геометрический поворот двумерного вектора на 90 градусов
auto length2() const -> typename std::remove_const< typename std::remove_reference< decltype(this->data[0])>::type >::type
Вычисление квадрата нормы (длины) вектора
auto unit(P newlen=1) const -> numvector< typename std::remove_const< decltype(this->data[0] *newlen)>::type, n >
Вычисление орта вектора или вектора заданной длины, коллинеарного данному
P length() const
Вычисление 2-нормы (длины) вектора
double Lambda(const Point2D &p, const Point2D &s)
Вспомогательная функция вычисления логарифма отношения норм векторов
double Alpha(const Point2D &p, const Point2D &s)
Вспомогательная функция вычисления угла между векторами
Point2D Omega(const Point2D &a, const Point2D &b, const Point2D &c)
Вспомогательная функция вычисления величины .