我正在尝试一些python中的代码。基本上它所做的是在 (x,y) 坐标系上模拟一扇门(从上方看)。任务给出了一个点列表,如果有的话,确定哪个门将首先击中。
确定一个点是否在被门击中的范围内很简单,确定哪个点首先被击中被证明是困难的,因为门可以顺时针或逆时针旋转,并且具有相当大且可变的摆动范围(以弧度/度数表示)。问题主要是我不确定要首先达到该点需要满足哪些条件。
更新:我确实计算了角度,但关注特殊情况,例如当门处于 1 度时,以及顺时针摆动到角度 180、190 和 300 的点。
我正在尝试一些python中的代码。基本上它所做的是在 (x,y) 坐标系上模拟一扇门(从上方看)。任务给出了一个点列表,如果有的话,确定哪个门将首先击中。
确定一个点是否在被门击中的范围内很简单,确定哪个点首先被击中被证明是困难的,因为门可以顺时针或逆时针旋转,并且具有相当大且可变的摆动范围(以弧度/度数表示)。问题主要是我不确定要首先达到该点需要满足哪些条件。
更新:我确实计算了角度,但关注特殊情况,例如当门处于 1 度时,以及顺时针摆动到角度 180、190 和 300 的点。
计算从门铰链到每个点的角度;旋转时最接近门本身的当前角度(铰链到门边缘)将首先被击中。
如果骑自行车给您带来麻烦:请注意,对于任何给定的角度,您都可以从 360 度中减去它以获得它的补码;两者中较小的那个是更接近它的方法。所以:
如果您考虑门的角度和每个点相对于门铰链的角度之间的差异,这可以简化。
然后,您可以使用以下公式找到角度:
length of vector from hinge to door: A
length of vector from hinge to point: B
angle = (A * B)/(A^2 + B^2)