我有一個網格,每個盒子是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
一個不考慮角度的函式應該是什么樣子的,而且還要考慮到垂直線的問題?
uj5u.com熱心網友回復:
你可以這樣做:
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: return True
else :
return False : return False
注意::
- (a,b)是你的網格原點的坐標 。
- 角度應該不同于90°,它定義了y軸的旋轉(x軸應該是水平的) (x,y)是你的點的坐標。
- N是盒子的大小 。
- 我選擇
n<int(n)-10**(-10),因為n定義了點可能在哪條線上(它是一個整數),并且由于計算的不確定性 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/321112.html
標籤:
