Este é um buraco de minigolfe:
O limite externo é um círculo com raio 10 e centro (0,0). O limite interno é um círculo com raio 3 e centro (0,5). O tee está em (0, -8). Suponha que a bola seja apenas um ponto com raio 0.
A dinâmica da bola é governada pelas seguintes regras:
A bola é inicialmente atingida com energia 50 e com um determinado ângulo.
- O ângulo é decrescente no sistema de coordenadas cartesianas, então 0 ° significa diretamente para a direita, 90 ° está diretamente para cima e assim por diante.
Quando a bola atinge a borda do círculo interno ou externo, ela ricocheteia usando a lei da reflexão.
A bola perde energia enquanto se move.
Para cada unidade de terra coberta, perde 1 unidade de energia.
Toda vez que bate em uma parede, perde 5 unidades de energia.
A bola para quando fica sem energia ou quando cai no buraco.
Se a bola bate em uma parede com <= 5 unidades de energia, ela para.
Ele cai no orifício se tiver energia <10 quando estiver dentro da distância 1 do orifício, caso contrário ele continuará se movendo.
Desafio
Dadas as coordenadas xy de um buraco, retorne um ângulo no qual você pode acertar a bola para que ela caia no buraco (se esse ângulo existir).
Entrada
Tome como entrada as coordenadas x e y do centro do furo, em qualquer forma conveniente. A entrada pode ser obtida de STDIN (ou alternativa mais próxima), parâmetros de linha de comando ou argumentos de função.
Resultado
Imprima ou retorne um ângulo em graus em que a bola pode ser atingida pelo tee, de forma que ela caia no buraco. Se esse ângulo existir, a saída deve estar no intervalo [0, 360); caso contrário, a saída deve ser -1.