Geralmente, passo por várias etapas com esse problema, parando quando não consigo descobrir como ir além.
Primeiro, faça o que você fez. Vá duro com o DRY. Se você não acabar com uma grande bagunça peluda, estará pronto. Se, como no seu caso, você não tiver um código duplicado, mas cada valor booleano tiver seu valor verificado em 20 locais diferentes, vá para a próxima etapa.
Segundo, divida o código em blocos. Os booleanos são referenciados apenas uma vez (bem, talvez duas vezes) para direcionar a execução para o bloco correto. Com dois booleanos, você acaba com quatro blocos. Cada bloco é quase idêntico. DRY se foi. Não faça de cada bloco um método separado. Isso seria mais elegante, mas colocar todo o código em um método torna mais fácil, ou até possível, para qualquer pessoa que faz manutenção, ver que precisa fazer cada alteração em quatro locais. Com código bem organizado e um monitor alto, as diferenças e os erros serão quase óbvios. Agora você tem código de manutenção e ele será executado mais rapidamente do que a bagunça emaranhada original.
Terceiro, tente pegar linhas de código duplicadas de cada bloco e transformá-las em métodos simples e agradáveis. Às vezes você não pode fazer nada. Às vezes você não pode fazer muito. Mas tudo que você faz leva você de volta ao DRY e torna o código um pouco mais fácil de seguir e mais seguro de manter. Idealmente, seu método original pode acabar sem código duplicado. Nesse ponto, você pode dividi-lo em vários métodos sem os parâmetros booleanos ou não. A conveniência do código de chamada é agora a principal preocupação.
Eu adicionei minha resposta ao grande número já aqui por causa do segundo passo. Eu odeio código duplicado, mas se é a única maneira inteligível de resolver um problema, faça-o de forma que alguém saiba rapidamente o que você está fazendo. Use vários blocos e apenas um método. Torne os blocos o mais idênticos possíveis em nomes, espaçamento, alinhamentos, ... tudo. As diferenças devem saltar para o leitor. Pode tornar óbvio como reescrevê-lo de uma maneira SECA e, se não, mantê-lo será razoavelmente simples.
createTrajectory...
funções públicas chamam?