UPDATE
现在继续完成该库中的其他 576 个函数,不包括已完成的两个多边形函数、已完成的三个球体距离算法以及两个新函数:angle_box_2d 和 angle_contains_ray_2d。另外,我切换到 C 版本,这样就不需要 extern,简化了工作。将旧的 C++ 版本放在 old_c++ 目录中,因此它仍然存在。
经过测试的性能,它与答案底部列出的相同。
UPDATE 2
所以只是一个快速更新,我还没有完成整个库(我只完成了大约 15%),但我已经在 github 上添加了这些未经测试的函数,以防万一您立即需要它们添加到多边形和球体距离算法中的旧点。
angle_box_2d
angle_contains_ray_2d
angle_deg_2d
angle_half_2d # MLM: double *
angle_rad_2d
angle_rad_3d
angle_rad_nd
angle_turn_2d
anglei_deg_2d
anglei_rad_2d
annulus_area_2d
annulus_sector_area_2d
annulus_sector_centroid_2d # MLM: double *
ball_unit_sample_2d # MLM: double *
ball_unit_sample_3d # MLM: double *
ball_unit_sample_nd # MLM; double *
basis_map_3d #double *
box_01_contains_point_2d
box_01_contains_point_nd
box_contains_point_2d
box_contains_point_nd
box_ray_int_2d
box_segment_clip_2d
circle_arc_point_near_2d
circle_area_2d
circle_dia2imp_2d
circle_exp_contains_point_2d
circle_exp2imp_2d
circle_imp_contains_point_2d
circle_imp_line_par_int_2d
circle_imp_point_dist_2d
circle_imp_point_dist_signed_2d
circle_imp_point_near_2d
circle_imp_points_2d # MlM: double *
circle_imp_points_3d # MLM: double *
circle_imp_points_arc_2d
circle_imp_print_2d
circle_imp_print_3d
circle_imp2exp_2d
circle_llr2imp_2d # MLM: double *
circle_lune_area_2d
circle_lune_centroid_2d # MLM; double *
circle_pppr2imp_3d
我上面评论的那些可能行不通,其他的可能行不通,但同样 - 多边形和球体距离肯定行。您可以指定米、公里、英里、海里,这对球面距离并不重要,输出的单位与输入的单位相同 - 算法与单位无关。
我今天早上把它放在一起,所以它目前只提供多边形中的点、凸多边形中的点和三种不同类型的球面距离算法,但至少您要求的那些现在可供您使用。我不知道是否与任何其他 python 库存在名称冲突,这些天我只是外围地参与了 python,所以如果有更好的名称,我愿意接受建议。
在 github 上:https://github.com/hoonto/pygeometry https://github.com/hoonto/pygeometry
它只是一个连接此处描述和实现的函数的 Python 桥梁:
http://people.sc.fsu.edu/~jburkardt/cpp_src/geometry/geometry.html http://people.sc.fsu.edu/~jburkardt/cpp_src/geometry/geometry.html
GEOMETRY 库实际上非常好,所以我认为为 python 桥接所有这些函数会很有用,我今晚可能会这样做。
编辑:其他一些事情
- 因为数学函数实际上是 C++ 编译的,所以您当然需要确保共享库位于路径中。您可以修改geometry.py以指向您想要放置该共享库的任何位置。
- 仅针对 Linux 编译,.o 和 .so 是在 x86_64 fedora 上编译的。
- 球面距离算法需要弧度,因此您需要将十进制纬度/经度转换为弧度,如 Geometry.py 中所示。
如果您在 Windows 上确实需要此功能,请告诉我,在 Visual Studio 中只需几分钟即可完成。但除非有人问,否则我可能会暂时不管它。
希望这可以帮助!
Rgds....Hoonto/马特
(新提交:SHA:4fa2dbbe849c09252c7bd931edfe8db478de28e6 - 修复了一些问题,例如弧度转换以及 py 函数的返回类型。还添加了一些基本性能测试以确保库正常运行。)
检测结果在每次迭代中,一次调用 sphere_distance1,一次调用 Polygon_contains_point_2d,因此总共调用 2 次库。
- ~0.062s:2000 次迭代,4000 次调用
- ~0.603s:20000 次迭代,40000 次调用
- ~0.905s:30000 次迭代,60000 次调用
- ~1.198s:40000 次迭代,80000 次调用