Я считаю, что вы должны работать на плоскости, сгенерированной вашими векторами a и b. Тогда код будет одинаковым независимо от размера (кстати, размерность векторов равна по определению размерность пространства).
Вы можете сделать это, ортогонализируя (a, b) как:
a' = a/||a||
b1 = b - (a'·b)a' <-- scalar product denoted by ·
b' = b1/||b||
Теперь вы летите на ортонормированной основе и должны вернуться в бизнес. Координаты b в этом базисе (a '· b, b' · b). Для a это аналогично (|| a ||, 0). Если вы хотите вернуться в окружающее пространство, просто напишите свой вектор с координатами (x1, x2) как x1 a '+ x2 b'.
Надеюсь, математические обозначения не слишком запутаны.