python - 如何计算一个点是否落在网格内的一条线上?
问题描述
我有一个网格,其中每个框都是 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 定义了点可能在哪一行(它是一个整数)并且由于计算的不确定性
推荐阅读
- css - 两个容器需要相同大小......但它们不是:为什么?
- python - python的新手,更改列表列表中的值?
- android - 如何在mapbox android中隐藏图层?
- c++ - arrayfire、指针和 C++
- docker - docker-compose - 服务“卷”必须是映射而不是数组
- python - Python Selenium 浏览器 - 或其他远程控制库 - 无需手动下载
- vue.js - Vue.js 生成带有 html 内容的 pdf
- css - 将 ::after 内容放到一个 div 中,该 div 是具有特定类的元素的父级
- google-cloud-firestore - SwiftUI + Firestore - 基于从 Firestore 返回的数组的过滤器列表
- javascript - 转换后的功能组件(具有角色权限的切换按钮)停止工作