Вы можете использовать знак производной вашей синусоидальной волны, чтобы сгенерировать треугольную волну следующим образом:
if (sineValue - oldSineValue >= 0)
{
value += delta;
}
else
{
value -= delta;
}
oldSineValue = sineValue;
Вам нужно будет выбрать дельту, чтобы задать необходимую амплитуду для вашей треугольной волны, и этобудет, конечно, зависеть от частоты синусоидальной волны и частоты дискретизации.
Преимущество этого метода состоит в том, что треугольная волна и синусоида имеют одинаковую фазу, то есть пики и пересечения нуля совпадают.