如何计算一个点是否落在网格内的一条线上?
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 定义了点可能在哪条线上(它是一个整数)并且由于计算的不确定性
我有一个网格,其中每个框都是 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 定义了点可能在哪条线上(它是一个整数)并且由于计算的不确定性