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


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

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

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::D rawClosedCurve класса 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::D rawCurve . В следующем примере рисуется три кардинальных сплайна, которые проходят через один и тот же набор точек:

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, то точки будут соединены прямыми линиями.

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