Чтобы сначала указать некоторые вещи: пользователь должен иметь возможность создать график, указав от 3 до 5 точек на 2D-поле. Первая и последняя точки всегда находятся на границах этого поля (их положение можно изменить только в направлении y, а не x). Вывод графика в этих позициях должен быть равен 0. Положение 3-й и последующих точек можно указать произвольно. График должен быть интерполирован, который проходит по всем точкам. Однако этот график должен быть максимально гладким и плоским. (пожалуйста, извините за математически неверную формулировку)
Важная вещь: впоследствии мне нужно взять значения этого графика и применить их к дискретному сигналу. Второе: в диапазоне оси x значения функции не должны превышать границы по оси y. На моих рисунках это будут 0 и 1 по оси y. Я создал несколько фотографий, чтобы проиллюстрировать то, о чем я говорю, используя 3 точки.
Некоторые мысли, которые у меня были:
- Используйте (кубические?) сплайны: их характеристики могут быть применены для построения таких кривых без особых проблем. Однако, насколько мне известно, они не относятся к глобальной оси x. Они указываются относительно следующей точки через параметр, обычно называемый (s). Поэтому будет сложно выбрать значения графика, связанные с осью x. Пожалуйста, поправьте меня, когда я ошибаюсь.
- создайте матрицу, которая содержит точки и производные в этих точках, и решите эту матрицу, используя разложение LU или что-то эквивалентное.
Пока у меня нет глубокого понимания этих методов, поэтому я могу пропустить какую-то замечательную технику или алгоритм, о которых я еще не знал.
Есть еще одна вещь, которую было бы здорово иметь: возможность регулировать крутизну кривой путем изменения одного или нескольких параметров. Я проиллюстрировал это, используя красный и черный график на некоторых своих рисунках. Любые идеи или подсказки, как решить это эффективно?