我在numpy数组中有一个网格网格(纬度,经度)数据的二维数组。从此数组中的单个指定点开始,我想在不同方向上延伸两条线,以便这两条线之间的区域创建一个圆的扇区。最好在下面的可视化文件中对此进行解释:
图像中的数字没有意义,仅用于可视化。
我希望将扇区内的所有点转换为NaN值,以便可以捕获红色零的索引。 (在图像中,将它们绘制为红色零点较为容易,但最好使用NaN。我所追求的确实是它们的索引。)对此的输入将是数组,圆弧的中心点以及角度每条线相对于水平线(或垂直线)。如图所示,这些线应超出(lat,lon)区域的边缘。
任何人都可以提出一种让我入门的方法,哪种numpy例程最有帮助?我承认我有些困惑。
编辑:我也有一个匹配的网格划分纬度和经度经度的数组。已知中心点的整数索引(因为我知道中心点的纬度/经度)。在本文中,“角度”和“线”是指文字地理空间。
答案 0 :(得分:1)
让您拥有中央索引cx, cy
预先计算扇形的开始和结束角度的值:
S_Cos = Cos(Start)
S_Sin = Sin(Start)
E_Cos = Cos(End)
E_Sin = Sin(End)
然后使用边界条件将floodfill设置为零:
(x-cx) * S_Sin - (y-cy) * S_Cos >= 0 //point is left to starting ray
(x-cx) * E_Sin - (y-cy) * E_Cos <= 0 //point is right to ending ray
x >= minx, y>=miny, x<=maxx, y<=maxy //coordinate is inside array
以前的方法:
对于小弧角(<90度):
选择填充方向-在大多数情况下,水平线是不错的选择,而对于某些开始/结束方向,垂直填充更方便(例如:350度-10度)
使用Bresenham line algorithm沿中心光线进行遍历。对于每个Y步,在射线之间或射线与矩形(阵列)边界之间用零水平线填充
对于较大的圆弧-通过OX,OY轴将圆弧划分为较小的圆弧。