0

我正在尝试一些python中的代码。基本上它所做的是在 (x,y) 坐标系上模拟一扇门(从上方看)。任务给出了一个点列表,如果有的话,确定哪个门将首先击中。

确定一个点是否在被门击中的范围内很简单,确定哪个点首先被击中被证明是困难的,因为门可以顺时针或逆时针旋转,并且具有相当大且可变的摆动范围(以弧度/度数表示)。问题主要是我不确定要首先达到该点需要满足哪些条件。

更新:我确实计算了角度,但关注特殊情况,例如当门处于 1 度时,以及顺时针摆动到角度 180、190 和 300 的点。

4

2 回答 2

2

计算从门铰链到每个点的角度;旋转时最接近门本身的当前角度(铰链到门边缘)将首先被击中。

如果骑自行车给您带来麻烦:请注意,对于任何给定的角度,您都可以从 360 度中减去它以获得它的补码;两者中较小的那个是更接近它的方法。所以:

  1. 计算点 a1 ... aN 的所有角度
  2. 从门角中减去它们,得到差异角 d1...dN
  3. 用 min( dN, 360 - dN ) 替换每个 dN 以获得“更短”的方法
  4. 选择最小值
于 2012-11-08T04:09:01.400 回答
0

如果您考虑门的角度和每个点相对于门铰链的角度之间的差异,这可以简化。

然后,您可以使用以下公式找到角度:

length of vector from hinge to door: A
length of vector from hinge to point: B

angle = (A * B)/(A^2 + B^2)
于 2012-11-08T04:14:55.377 回答