Detectar vizinhos em movimento

Ola pessoal! Sou novo no fórum e espero não estar a fazer asneira em criar este tópico, mas não consegui encontrar no fórum o que precisava!

Estou a criar um simulador de uma cidade. Em que tenho carros, pessoas, autocarros, etc.

O meu problema está que não consigo arranjar uma solução geral para detectar se existe por exemplo um carro a frente de outro, e ele ter de abrandar(diminuir a velocidade) para não passar por cima do que vai a frente.

Os vários carros são threads, e movem-se através de coordenadas x e y. Eles deslocam-se sobre linhas já feitas.
Consigo saber que são os carros que se encontram mais perto.
Os únicos que me interessam fazer abrandar são os que vão no mesmo sentido, se vier em sentido contrario não interessa.

Espero que alguém me possa ajudar. Não estou a conseguir arranjar uma solução para o meu problema.

Cumprimentos a todos

Eis o caminho para a iluminação:
http://www.pontov.com.br/site/index.php/arquitetura/54-matematica-e-fisica/132-o-uso-de-vetores-nos-jogos

Amém.

Obrigado pela dica. Mas mesmo assim não estou a conseguir chegar a solução.
Apenas estou a usar coordenada x e y. O carro ocupa apenas um valor para x e outro para y.
O problema é que tenho dois carros e não consigo saber qual dos dois está a frente do outro. Para poder mandar abrandar o que for mais atrás.

Você realmente leu e entendeu o artigo? Voce deve usar o produto escalar para descobrir se os carros seguem para mesma direção ou não.

Mas se de facto estiverem a seguir na mesma direcção, como é que vou saber qual o que vai a frente dos dois?
E se num momento estão os dois a seguir para a direita, e a seguir o da frente vira para cima, como vou detectar que estão a andar na mesma direcção?
A direcção que eles seguem não é fixa.