Geometry 如何知道具有相同大小方形单元的旋转栅格中点的位置

Geometry 如何知道具有相同大小方形单元的旋转栅格中点的位置,geometry,cell,trigonometry,Geometry,Cell,Trigonometry,给定一个倾斜角度θ(θ)的网格,该网格具有索引为00、01、02、…、55(其中第一个数字为x索引,第二个数字为y索引,例如00表示第0行和第0列交叉处的单元格)和一个点p(x,y),如果不检查所有单元格,我们怎么知道点位于哪个网格单元格中 例如,在下图中,点p位于索引为23的单元格中 我找到了一个答案,解释了如何确定一个点是否位于旋转的矩形内,但使用这种方法,我需要检查所有的网格单元。也许是最简单的方法-将点旋转相同的角度(带负号),并检查轴对齐网格中的新坐标 nx = x * cos(th

给定一个倾斜角度
θ
(θ)的网格,该网格具有索引为00、01、02、…、55(其中第一个数字为x索引,第二个数字为y索引,例如00表示第0行和第0列交叉处的单元格)和一个点
p(x,y)
,如果不检查所有单元格,我们怎么知道点位于哪个网格单元格中

例如,在下图中,点
p
位于索引为23的单元格中


我找到了一个答案,解释了如何确定一个点是否位于旋转的矩形内,但使用这种方法,我需要检查所有的网格单元。

也许是最简单的方法-将点旋转相同的角度(带负号),并检查轴对齐网格中的新坐标

nx = x * cos(theta) - y * sin(theta)
ny = x * sin(theta) + y * cos(theta)
row = (int) (ny / cellsize)
col = (int) (nx / cellsize)

也许是最简单的方法——将点旋转相同的角度(带负号),然后在轴对齐的网格中检查新坐标

nx = x * cos(theta) - y * sin(theta)
ny = x * sin(theta) + y * cos(theta)
row = (int) (ny / cellsize)
col = (int) (nx / cellsize)

我认为我没有得到正确的结果。考虑p(5,1),Th=45度,CySeles=1。我得到了row=-3和col=3。好的,我改变了符号,使用了和网格相同的θ方向。现在row=2,col=4,在我们应用程序查找围绕坐标原点旋转后点的位置之前,我们希望看到点在未旋转网格中的位置。为了实现这一点,我们必须朝另一个方向旋转。在通常的数学坐标系中,网格基本上是以负角度旋转的(CCW为正,CW为负),所以我们用正θ值为点建立公式。让角度=135,x=0,y=-3,所以nx=-3*0.7)=2.1ny=-3*(-0.7)=2.1。细胞2,2,我想我没有得到正确的结果。考虑p(5,1),Th=45度,CySeles=1。我得到了row=-3和col=3。好的,我改变了符号,使用了和网格相同的θ方向。现在row=2,col=4,在我们应用程序查找围绕坐标原点旋转后点的位置之前,我们希望看到点在未旋转网格中的位置。为了实现这一点,我们必须朝另一个方向旋转。在通常的数学坐标系中,网格基本上是以负角度旋转的(CCW为正,CW为负),所以我们用正θ值为点建立公式。让角度=135,x=0,y=-3,所以nx=-3*0.7)=2.1ny=-3*(-0.7)=2.1。单元格2,2,如预期