Нарисуйте сплайны со списком точек в 2D-массиве - PullRequest
0 голосов
/ 05 сентября 2018

Я изучил сплайны , nurbs и Кривые Безье бит Я не могу найти алгоритм, который соответствует моим потребностям. Я был бы признателен за помощь с алгоритмом или функцией, которая может нарисовать кривую на основе точек в двумерном массиве.

Пример:

Первая отправная точка в моем массиве: ex arr [1,2] = новая точка (1,2)

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0 1 , 0,0,0,0,0, 1 , 0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0 1 , 0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0 1 , 0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

Выход:

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0 1 , 0,0,0,0,0 1 , 0,0,0,0,0,0,0
0,0 1 , 0,0,0,0, 1 * +1048 *, 0, 1 , 0,0,0,0,0,0
0,0,0, 1 , 0,0,0, 1 0,0 1 , 0,0,0,0,0
0,0,0, 1 0,0 1 , 0,0,0,0,0,0,0,0,0
0,0,0,0, 1 1 1 , 0,0,0,0,0,0,0,0,0
0,0,0,0,0, 0 , 0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

1 Ответ

0 голосов
/ 12 сентября 2018

Этот вопрос состоит из двух частей: определение гладкой кривой, проходящей через эти точки, и затем рисование этой кривой в массиве.

Распространенным типом кривой, проходящим через несколько определенных точек, является Сплайн Catmull-Rom . Возможно, вы захотите узнать, отвечает ли это вашим потребностям.

Чтобы определить ваш сплайн Catmull-Rom, вы хотите отсканировать ваш 2D-массив слева направо, и, где есть 1, добавьте точку к сплайну. Вам также необходимо придумать параметризацию кривой. Использование номера столбца в качестве значения параметра для каждой точки, вероятно, даст хорошие результаты.

С точки зрения рисования, есть несколько разных подходов. Сплайны Catmull-Rom являются параметрическими, поэтому вы можете попытаться вычислить точку на кривой при большом количестве значений t и установить соответствующее расположение массива. Если у вас реализован примитив рисования линий (например, рисование линий Брезенхэма), вы можете вычислить меньшее количество точек на сплайне и заполнить их линиями. Есть и другие методы, такие как разложение сплайнов на методы Безье или отсканирование, но они более сложны и, вероятно, не нужны.

...