一、点到直线的距离——批处理版本

import numpy as npdef point_distance_line(points, line_points1, line_points2):"""计算点到直线的距离(向量化版本)"""# 计算向量vec1 = line_points1 - pointsvec2 = line_points2 - points# 计算向量叉积cross_product = np.abs(np.cross(vec1, vec2))# 计算直线长度line_length = np.linalg.norm(line_points1 - line_points2, axis=1)# 计算点到直线的距离distance = cross_product / line_lengthreturn distance# 生成测试数据
points = np.array([[2, 3], [1, 1], [3, 2]])
line_points1 = np.array([[0, 0], [0, 1], [1, 0]])
line_points2 = np.array([[1, 1], [1, 2], [2, 1]])# 计算点到直线的距离
distance = point_distance_line(points, line_points1, line_points2)print(distance)  # 输出:[ 2.12132034  0.70710678  1.11803399]

其中直线以两个点的形式给出,其中 points 为一个 n*2 的向量,表示待求点的坐标;line_points1, line_points2 都为 n*2 的向量,每一列分别为直线两个点的坐标。

二、点是否在多边形内部

def check_in_2d_polygon(points, polygon):inside = np.ones(points.shape[0]) < 0angle_sum = np.zeros(points.shape[0])for pg1, pg2 in zip(polygon[:-1, :], polygon[1:, :]):k = (pg1[1] - pg2[1]) / (pg1[0] - pg2[0] + 1e-7)  # 避免除0b = pg1[1] - k * pg1[0]dis = np.abs(k * points[:, 0] - 1 * points[:, 1] + b) / np.sqrt(k * k + 1)inside |= (dis < 1e-5) & (((pg1[0] <= points[:, 0]) & (points[:, 0] <= pg2[0])) | ((pg2[0] <= points[:, 0]) & (points[:, 0] <= pg1[0]))) # 是否在多边形边上# 计算夹角angle = np.arctan2(pg1[1] - points[~inside, 1], pg1[0] - points[~inside, 0]) - np.arctan2(pg2[1] - points[~inside, 1], pg2[0] - points[~inside, 0])angle[angle >= np.pi] -= np.pi * 2angle[angle <= -np.pi] += np.pi * 2# 累积angle_sum[~inside] += angleinside[~inside] = np.abs(np.abs(angle_sum[~inside]) - 2 * np.pi) < 1e-5 # 顺时针和逆时针分别为 2pi 和 -2pireturn inside

输入 points 为一个 n*2 的向量,表示待求点的坐标;polygon 为一个 m*2 的向量,每一列为多边形每个顶点的坐标,其中首尾坐标相同构成一个封闭多边形。

算法使用夹角和的方法来判断一个点是否在多边形内。具体来说,通过计算点与多边形每个顶点之间的夹角,然后判断夹角和是否等于360度。如果夹角和等于360度,则点在多边形内,否则点在多边形外。

几何求解 Python相关推荐

  1. SciPy 非线性方程求解 | Python技能树征题

    SciPy 非线性方程求解 | Python技能树征题 0. 前言 1. 第 1 题:一元非线性方程求解 2. 第 2 题:非线性方程组求解 试题代码地址 0. 前言 在自然科学和工程学科中,许多系统 ...

  2. 3D重建:硬派几何求解vs深度学习打天下?

    点击我爱计算机视觉标星,更快获取CVML新技术 本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载. 机器之心原创 作者:Yuanyuan Li 编辑:Hao Wang ...

  3. python求解非线性多元方程_求解python中的colebrook(非线性)方程

    我想在MATLAB中的python what this guy did中做 . 我已经安装了anaconda,所以我有numpy和sympy库 . 到目前为止,我已尝试使用numpy nsolve,但 ...

  4. 投资组合--最优化求解(Python)

    除了用蒙特卡洛模拟进行投资组合求解外,也可以通过python的scipy.optimize库进行最优化求解.接着上一篇文章,我们继续使用scipy.optimize进行投资组合最优化求解工作. imp ...

  5. 关于矩阵的秩及求解Python求法

    关于消元法求解线性方程组 可将系数和结果转换为矩阵,并可令B为增广矩阵 将A.B通过消元法求解 所有的m*n的矩阵经过一系列初等变换,都可以变成如下的形式: r就是最简矩阵当中非零行的行数,它也被称为 ...

  6. python画三维几何图-Python下opencv使用笔记(二)(简单几何图像绘制)

    简单几何图像一般包含点.直线.矩阵.圆.椭圆.多边形等等.首先认识一下opencv对像素点的定义. 图像的一个像素点有1或者3个值.对灰度图像有一个灰度值,对彩色图像有3个值组成一个像素值.他们表现出 ...

  7. 7650 不定方程求解 python

    http://noi.openjudge.cn/math/7650/ """ 7650 不定方程求解 http://noi.openjudge.cn/math/7650/ ...

  8. 通过对极几何求解相机运动

    关于对极几何部分(无论看哪个都发现公式比较难懂-数学基因不足的忧伤),参考: 对极几何-两视图对极约束 基础矩阵 这是我认为讲的比较清楚的对极几何原理. 看到以上的原理得出的重要结论: 1.对极约束的 ...

  9. 求解Python 爬取百度翻译手机版{errno:997,from:zh,to:en,query:\u4eba\u751f\u82e6\u77ed}怎么办

    环境:python3.7.3 import requestsurl = "https://fanyi.baidu.com/basetrans" data = {"quer ...

最新文章

  1. redis系列(一)-----日常使用详解
  2. 【MM模块】Contract 采购合同简介
  3. 斐波那契数列的两种实现呢
  4. 《简明 PHP 教程》00 开篇
  5. Linux expr命令、Linux wc命令、Linux let 命令
  6. The differences between SOAP1.1 and SOAP1.2
  7. Java并发包下的CAS相关的原子操作
  8. Android binder学习一:主要概念
  9. 小精灵股市行情软件办公室专用绿色版.rar
  10. web前端实习一个月的心得体会
  11. 算法图解————K 近邻算法
  12. 最新坦白说破解方法!!!
  13. 三维激光扫描后处理软件_青出于蓝 尽锋芒——非白三维发布蓝激光手持三维扫描仪...
  14. 中国心率监测器行业市场供需与战略研究报告
  15. python当中的列表函数和列表推导式
  16. TMS320F28335入门(七)eCAP学习
  17. 最短路Dijkstra+Floyd
  18. java根据jpg格式图片或视频文件生成gif动图
  19. ThreadLocal使用时因线程复用导致数据混乱分析
  20. 京东详情页批量关联海报,提高转化80%

热门文章

  1. java8双层for循环,Java8处理List的双层循环问题
  2. CSDN技能树实践测评:实践是检验真理的唯一标准
  3. iOS多线程同时操作同一内存造成野指针
  4. IOS多线程同步问题
  5. 实验笔记之——基于DWT的octave layer(DWT在pytorch中实现)
  6. Linux 基础学习(笔记)
  7. 六、LVM与磁盘配额
  8. JSP 弹出对话框的方式总结
  9. git 使用writer_「github 教程」写给大家看的教程:从零开始在GitHub上部署个人博客 - seo实验室...
  10. Linux-实现与Windows相互复制粘贴功能