Não vou lhe dar uma resposta, tenho certeza de que é útil ou até correta, mas aqui está:
Depois de jogar um pouco mais com o mathematica (verifique o final da resposta para os notebooks / notebooks publicados), esta solução parece estar correta, mesmo que não seja a melhor em termos de eficiência.
Eu escrevi isso no mathematica que corresponde ao seu problema. Basicamente, resolve as equações / desigualdades para a variável OA, que é o que precisamos descobrir. A saída nos fornecerá as possíveis soluções que o OA pode ter e as condições que precisam ser verificadas para que cada solução seja válida:
Reduce[{BPx, BPy} + t*{BVx, BVy} == {OPx, OPy} + t*OV*{Cos[OA], Sin[OA]} && t != 0 && OV != 0, {OA}]
{BPx, BPy} é a posição atual do azul
{BVx, BVy} é o vetor de velocidade do azul
{OPx, OPy} é a posição de marcador de laranja
OV é a norma do vetor de velocidade da bala de laranja (velocidade total)
OA é o ângulo da bala da laranja (vetor do ângulo de velocidade)
é o tempo necessário para que a bala atinja o azul
Tentei colocar t> 0 && OV> 0 nas condições, mas o mathematica levaria uma eternidade, então usei t! = 0 && OV! = 0. Portanto, as soluções que vou dar aqui funcionam apenas quando o azul não está exatamente mesma posição da laranja e quando a bala da laranja realmente se move (em vez de ficar parada)
A saída é gigantesca: http://freetexthost.com/xzhhpr5e2w
No entanto, se extrairmos as partes OA == _, obtemos o seguinte:
http://freetexthost.com/iyrhqoymfo
Esses são os valores que o OA pode ter (cada um exigindo condições diferentes para serem válidas).
Com uma análise mais aprofundada, retirando as soluções que exigem que o OV seja negativo, o que não queremos, obtive o seguinte:
http://freetexthost.com/iy4wxepeb6
Portanto, essas são as possíveis soluções para o problema, cada uma exigindo condições diferentes para serem válidas. Para que um determinado ângulo OA seja uma solução válida, as seguintes condições devem atender:
Reduce[{BPx, BPy} + t*{BVx, BVy} == {OPx, OPy} + t*OV*{Cos[OA], Sin[OA]} && t != 0 && OV != 0, {t}]
Resultado:
(BVy - OV Sin[OA] != 0 && BPx == (BPy BVx + BVy OPx - BVx OPy - BPy OV Cos[OA] + OPy OV Cos[OA] - OPx OV Sin[OA])/(BVy - OV Sin[OA]) && t == (-BPy + OPy)/(BVy - OV Sin[OA]) && BPy OV - OPy OV != 0) ||
(BVy == OV Sin[OA] && BPy == OPy && BVx - OV Cos[OA] != 0 && t == (-BPx + OPx)/(BVx - OV Cos[OA]) && BPx OV - OPx OV != 0) ||
(BVy == OV Sin[OA] && BVx == OV Cos[OA] && BPy == OPy && BPx == OPx && OV t != 0)
Portanto, considere apenas as soluções em que isso verifica (você não precisa verificar as partes t == _. São elas que fornecem o tempo necessário para a bala atingir o veículo, se as outras condições forem válidas. Observe que, se t resulta em um valor negativo, você não pode considerar um determinado OA como uma solução válida, mesmo que verifique as outras condições (isso ocorre porque usamos t! = 0 em vez de t> 0 na redução).
Também pode ser uma boa ideia perguntar em /math// sobre isso.
Editar
Eu cresci um pouco de interesse por essa pergunta, então criei um caderno comentado com uma demonstração gráfica de tudo o que expliquei. Faça o download aqui:
http://www.2shared.com/file/pXhYyhN1/towerBullets.html
Ou aqui:
http://www.2shared.com/file/W01g4sST/towerBullets.html
(esta é a versão publicada e você só precisa do mathematica player, que é gratuito) para vê-lo. Se você não possui o mathematica, este é o caminho a seguir.
Captura de tela: