Первая проблема, с которой вы столкнетесь, - это четное определение касательной в одной из вершин кривой. Рассмотрим, например, что у вас есть два массива:
x = { 1.0, 2.0, 2.0 };
y = { 1.0, 1.0, 2.0 };
Тогда во второй вершине у вас есть 90-градусное изменение направления линии. В этом месте касательная даже математически не определена.
Ответ на комментарий Грегсета ниже
Полагаю, что в вашем примере "касательная" во второй точке - это линия, параллельная (P0, P2), проходящая через P1 ... что даст мне ответ: для любой точки индекса N параллель к (N-1, N + 1), проходящая через N. Это было бы неплохим приближением?
Это зависит от того, для чего вы его используете. Рассмотрим для примера:
x = { 1.0, 2.0, 2.0 };
y = { 1.0, 1000000, 1000000 };
Это в основном L-образная форма с очень высокой вертикальной линией. В вашем предложении это даст вам почти вертикальную касательную. Это то, что вы хотите, или вы предпочитаете касательную в 45 градусов в этом случае? Это также зависит от ваших входных данных, как вы можете определить это.
Одним из решений является соединение двух векторов с вершиной, их нормализация и использование алгоритма. Таким образом, вы получите тангенс в 45 градусов в приведенном выше примере.