擅长:python、mysql、java
<p>若要将任何数字包装到特定范围,请使用模(<code>%</code>):<a href="https://stackoverflow.com/q/4432208/2988730">How does % work in Python?</a>。幸运的是,python实现使结果的符号始终等于右操作数。以下是一些示例,说明了模如何将所有内容包装到所需的范围:</p>
<pre><code>>>> 45 % 360
45
>>> -38 % 360
322
>>> 1000 % 360
280
</code></pre>
<p>鉴于此,很容易将任何度值映射到字母缩写。每个缩写代表一个22.5度宽的窗口。窗口从零偏移了11.25度,所以我们可以通过</p>
<pre><code>from math import floor
index = floor(((deg + 11.25) % 360) / 22.5)
</code></pre>
<p>该索引将始终是一个介于0和15之间的数字。您可以直接使用它索引指南针的点列表,而无需任何词典或昂贵的搜索:</p>
<pre><code>list_of_points = ['N', 'NNE', 'NE', ..., 'NW', 'NNW']
def deg_to_point(deg):
return list_of_points[floor(((deg + 11.25) % 360) / 22.5)]
</code></pre>
<p>这是因为你所有的箱子都是一样大小的。如果你想要罗盘上更多的点数,你可以把11.25和22.5减半。如果你有不相等的箱子,你最好的办法是使用模来规范化你的输入,然后在箱子边缘做一个二进制搜索。你知道吗</p>