Поделиться через


Построение кардинальных сплайнов

Кардинал сплайн — это кривая, которая проходит гладко через заданный набор точек. Чтобы нарисовать кардинальный сплайн, создайте объект графики и передайте адрес массива точек методу Graphics::DrawCurve. В следующем примере строится кардинальная сплайн-линия колоколообразной формы, которая проходит через пять назначенных точек.

Point points[] = {Point(0, 100),
                  Point(50, 80),
                  Point(100, 20),
                  Point(150, 80),
                  Point(200, 100)};

Pen pen(Color(255, 0, 0, 255));
graphics.DrawCurve(&pen, points, 5);

На следующем рисунке показана кривая и пять точек.

иллюстрация кардинального сплайна, проходящего через пять точек

Вы можете использовать метод Graphics::DrawClosedCurve класса Graphics для рисования закрытой кардинальной сплайны. В закрытом кратном сплайне кривая продолжается через последнюю точку массива и подключается к первой точке в массиве.

В следующем примере показано, как нарисовать замкнутую кардинальную кривую, проходящую через шесть заданных точек.

Point points[] = {Point(60, 60),
   Point(150, 80),
   Point(200, 40),
   Point(180, 120),
   Point(120, 100),
   Point(80, 160)};

Pen pen(Color(255, 0, 0, 255));
graphics.DrawClosedCurve(&pen, points, 6);

На следующем рисунке показана закрытая линия сплайна вместе с шестью точками:

иллюстрация закрытого кардинального сплайна, проходящего через шесть точек

Можно изменить изгиб кардинального сплайна, передав аргумент натяжения в метод Graphics::DrawCurve. В следующем примере рисуются три кардинальных сплайна, которые проходят через тот же набор точек.

Point points[] = {Point(20, 50),
                  Point(100, 10),
                  Point(200, 100),
                  Point(300, 50),
                  Point(400, 80)};

Pen pen(Color(255, 0, 0, 255));
graphics.DrawCurve(&pen, points, 5, 0.0f);  // tension 0.0
graphics.DrawCurve(&pen, points, 5, 0.6f);  // tension 0.6
graphics.DrawCurve(&pen, points, 5, 1.0f);  // tension 1.0

На следующем рисунке показаны три сплайна вместе со значениями напряженности. Обратите внимание, что, когда напряжение равно 0, точки связаны прямыми линиями.

иллюстрация трех кардинальных сплайнов, проходящих через один набор точек, но с разными натяжениями