如何计算一个点是否落在网格内的一条线上?

How do I calculate if a point falls on a line within a grid?

我有一个网格,其中每个框都是 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

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

您可以执行以下操作:

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 定义了点可能在哪条线上(它是一个整数)并且由于计算的不确定性