首页 > 解决方案 > 如何计算一个点是否落在网格内的一条线上?

问题描述

我有一个网格,其中每个框都是 NxN。我可以将该网格旋转 A 度。(所以如果 A 是 45,那么网格中的每条线都是 45 度或 135 度)。

给定一个网格框大小、一个角度和一组坐标。如何确定坐标 [x,y] 是否位于网格上?

我尝试了以下,适用于 45 度,但没有其他角度

BOX_SIZE = 2

def on_grid(x: float, y: float) -> bool:
    return x % BOX_SIZE == y % BOX_SIZE

无论角度如何,一个函数看起来像什么,并且还考虑到垂直线?

标签: pythonmathtrigonometry

解决方案


您可以执行以下操作:

from math import tan
def on_grid(a,b,x,y,angle,N):
     n = (1/N)*(y-tan(angle)*(x-a)-b)
     if n<int(n)-10**(-10):
           return True
     else :
           return False

注意::

  • (a,b) 是网格原点的坐标
  • 角度应该不同于 90° 它定义了 y_axis 的旋转(x_axis 应该是水平的)
  • (x,y) 你点的坐标
  • N 盒子的大小
  • 我之所以选择n<int(n)-10**(-10)是因为 n 定义了点可能在哪一行(它是一个整数)并且由于计算的不确定性

推荐阅读