几何求解 Python
一、点到直线的距离——批处理版本
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相关推荐
- SciPy 非线性方程求解 | Python技能树征题
SciPy 非线性方程求解 | Python技能树征题 0. 前言 1. 第 1 题:一元非线性方程求解 2. 第 2 题:非线性方程组求解 试题代码地址 0. 前言 在自然科学和工程学科中,许多系统 ...
- 3D重建:硬派几何求解vs深度学习打天下?
点击我爱计算机视觉标星,更快获取CVML新技术 本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载. 机器之心原创 作者:Yuanyuan Li 编辑:Hao Wang ...
- python求解非线性多元方程_求解python中的colebrook(非线性)方程
我想在MATLAB中的python what this guy did中做 . 我已经安装了anaconda,所以我有numpy和sympy库 . 到目前为止,我已尝试使用numpy nsolve,但 ...
- 投资组合--最优化求解(Python)
除了用蒙特卡洛模拟进行投资组合求解外,也可以通过python的scipy.optimize库进行最优化求解.接着上一篇文章,我们继续使用scipy.optimize进行投资组合最优化求解工作. imp ...
- 关于矩阵的秩及求解Python求法
关于消元法求解线性方程组 可将系数和结果转换为矩阵,并可令B为增广矩阵 将A.B通过消元法求解 所有的m*n的矩阵经过一系列初等变换,都可以变成如下的形式: r就是最简矩阵当中非零行的行数,它也被称为 ...
- python画三维几何图-Python下opencv使用笔记(二)(简单几何图像绘制)
简单几何图像一般包含点.直线.矩阵.圆.椭圆.多边形等等.首先认识一下opencv对像素点的定义. 图像的一个像素点有1或者3个值.对灰度图像有一个灰度值,对彩色图像有3个值组成一个像素值.他们表现出 ...
- 7650 不定方程求解 python
http://noi.openjudge.cn/math/7650/ """ 7650 不定方程求解 http://noi.openjudge.cn/math/7650/ ...
- 通过对极几何求解相机运动
关于对极几何部分(无论看哪个都发现公式比较难懂-数学基因不足的忧伤),参考: 对极几何-两视图对极约束 基础矩阵 这是我认为讲的比较清楚的对极几何原理. 看到以上的原理得出的重要结论: 1.对极约束的 ...
- 求解Python 爬取百度翻译手机版{errno:997,from:zh,to:en,query:\u4eba\u751f\u82e6\u77ed}怎么办
环境:python3.7.3 import requestsurl = "https://fanyi.baidu.com/basetrans" data = {"quer ...
最新文章
- redis系列(一)-----日常使用详解
- 【MM模块】Contract 采购合同简介
- 斐波那契数列的两种实现呢
- 《简明 PHP 教程》00 开篇
- Linux expr命令、Linux wc命令、Linux let 命令
- The differences between SOAP1.1 and SOAP1.2
- Java并发包下的CAS相关的原子操作
- Android binder学习一:主要概念
- 小精灵股市行情软件办公室专用绿色版.rar
- web前端实习一个月的心得体会
- 算法图解————K 近邻算法
- 最新坦白说破解方法!!!
- 三维激光扫描后处理软件_青出于蓝 尽锋芒——非白三维发布蓝激光手持三维扫描仪...
- 中国心率监测器行业市场供需与战略研究报告
- python当中的列表函数和列表推导式
- TMS320F28335入门(七)eCAP学习
- 最短路Dijkstra+Floyd
- java根据jpg格式图片或视频文件生成gif动图
- ThreadLocal使用时因线程复用导致数据混乱分析
- 京东详情页批量关联海报,提高转化80%
热门文章
- java8双层for循环,Java8处理List的双层循环问题
- CSDN技能树实践测评:实践是检验真理的唯一标准
- iOS多线程同时操作同一内存造成野指针
- IOS多线程同步问题
- 实验笔记之——基于DWT的octave layer(DWT在pytorch中实现)
- Linux 基础学习(笔记)
- 六、LVM与磁盘配额
- JSP 弹出对话框的方式总结
- git 使用writer_「github 教程」写给大家看的教程:从零开始在GitHub上部署个人博客 - seo实验室...
- Linux-实现与Windows相互复制粘贴功能