这是一个迷你高尔夫球洞:
外边界是一个半径为10且中心为(0,0)的圆。内边界是一个半径为3且中心为(0.5)的圆。发球台在(0,-8)。假设球只是半径为0的点。
球的动力学受以下规则支配:
最初,球以能量50和给定角度击中。
- 角度在笛卡尔坐标系中呈递减角度,因此0°表示直接向右,90°则直接向上,依此类推。
当球撞击内圆或外圆的边缘时,它会根据反射定律从圆上反弹。
球在移动时会失去能量。
它覆盖的每单位地面都会损失1单位的能量。
每次从墙壁反弹时,都会损失5个单位的能量。
当球用尽能量或掉进洞中时,球停止运动。
如果球以小于等于5的能量击中墙壁,它将停止。
如果它在孔的距离1之内,且能量<10,它会掉入孔中,否则它将继续移动。
挑战
在给定孔的xy坐标的情况下,返回一个角度,您可以按该角度击球,以使球掉入孔中(如果存在该角度)。
输入值
以任何方便的形式输入孔中心的x坐标和y坐标。输入可以来自STDIN(或最接近的替代品),命令行参数或函数参数。
输出量
打印或返回一个角度,以度为单位,可以从发球区击球,使球落入孔中。如果存在这样的角度,则输出应在[0,360)范围内,否则输出应为-1。
您可能想要指定应如何读取x和y值(标准输入,函数参数等)。
—
Loovjo 2015年
如果没有这样的角度应该返回什么?
—
Alex A.
我们指定如果有解决方案,该函数将返回[0,360)中的值,否则返回-1。
—
埃里克·布鲁克斯
我做了一些编辑。如果与您的意图不符,请回滚编辑。
—
Alex A.
另外,您能否提供至少一个测试用例?
—
Alex A.