Не нужно смешивать табы с пробелами. Конкретно для тебя проблема решается автозаменой таба на 4 пробела по всему коду. Также стоит настроить редактор, чтобы он заменял табы на пробелы при вводе.
Класс реализует две пересекающиеся функциональности. Возможно, имеет смысл разделить на два? Стоит помнить, что разделение, хоть и упрощает каждый класс в отдельности, всю систему может усложнить или хотя бы банально привести к большему количеству кода.
Альтернатива разделению - обособление частей кода отвечающих за линейное и за криволинейное движение. Сейчас это сделано для методов, но остаются аттрибуты, вызовы этих методов и хак в конструкторе.