我有一个点网格(例如(1,1),(1,2),(1,3)......(100,99),(100,100))包含在一个pandas数据帧中,并且也导出为.csv文件。
然后我有一个边界条件,例如在这个网格中心的一个直径为25的圆。我希望能够删除圆外的所有点,并将内部的点保持为新的数据帧。
我可以得到圆的边界,xmin,xmax,ymin,ymax,但是当我删除与此相关的点时,我得到一个正方形(由于最小/最大值是整数,只是找到最远的从中心点。)
是否可以保存圆圈内的所有点?优选使用可应用于elipses等的通用方法。
编辑:我发现了这个,类似于:How to delete a set of meshgrid points inside a circle?
但是依赖于在代码中输入的圆的尺寸,因此不是通用的。由于我有形状的边界点,我将不得不计算它,并假设它是圆形的(它可能并不总是如此)。有没有办法调整这个,所以我可以使用边界点创建一个“填充”区域,然后执行布尔操作?
答案 0 :(得分:0)
因为你的问题是......
是否可以保存圆圈内的所有点?
是的,这是可能的,并且有一个公式。 distance_from
下面的函数是2D计划的基本欧氏距离。
def encloses(center_of_circle, vector2D, radius_of_circle):
return distance_from(center_of_circle, vector2D) <= radius_of_circle
如果vector2D在圆圈中,则此函数encloses()
将返回True。如果没有,则为假。用它过滤你的pandas DataFrame。
我怀疑,当你有一个正方形而不是一个圆形时,你正在为一个正方形计算公式encloses()
,而不是一个圆...