参考:高效判断点是否在正六边形蜂窝内的方法

上述文章给了我们一个高效的思路:在正六边形为原点且中心轴与y轴重合时,如何高效判断点是否在该正六边形内。本文的工作是将这种情况推广到正六边形处于任意位置。

数学推导

本文的所有的符号意义可以参考图。

初始条件

已知六个顶点坐标,六个顶点呈逆时针顺序,分别为(x1,y1),...,(x6,y6)(x_1,y_1), ..., (x_6,y_6)(x1​,y1​),...,(x6​,y6​)。现在要判断(xp,yp)(x_p,y_p)(xp​,yp​)在不在正六边形内。

因为知道了六个顶点,因此:

  • 中心点可求,即为o⃗=(xo,yo)=(x2+x52,y2+y52)\vec{o} = (x_o, y_o) = (\frac{x_2+x_5}{2}, \frac{y_2+y_5}{2})o=(xo​,yo​)=(2x2​+x5​​,2y2​+y5​​)
  • 长轴的一半可求,即为a=(x4−xo)2+(y4−yo)2a = \sqrt{(x_4 - x_o)^2 + (y_4 - y_o)^2}a=(x4​−xo​)2+(y4​−yo​)2​
  • 以(x3−x5,y3−y5)(x_3 - x_5, y_3 - y_5)(x3​−x5​,y3​−y5​)为正方向的 单位向量 t53⃗\vec{t_{53}}t53​​也可求,这个用于后文求投影用。

思路

  • 求出p点在如图的两条对称轴上的投影长度xxx和yyy;
  • 如果y>ay > ay>a或x>32ax > \frac{\sqrt{3}}{2}ax>23​​a,则不在内;
  • 如果a−y<x/3a-y < x / \sqrt{3}a−y<x/3​,则不在内;
  • 否则,在正六边形内。

投影求法

先建立向量top⃗\vec{t_{op}}top​​,即将o点与p点连起来。

top⃗=(xp−xo,yp−yo)\vec{t_{op}} = (x_p - x_o, y_p - y_o)top​​=(xp​−xo​,yp​−yo​)

则,x即为top⃗⋅t53⃗\vec{t_{op}} \cdot \vec{t_{53}}top​​⋅t53​​。

而由勾股定理,y易求。

y=∣∣top⃗∣∣2−x2y = \sqrt{||\vec{t_{op}}||^2 - x^2}y=∣∣top​​∣∣2−x2​

python 程序实现

def isInGrid(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6, x_p, y_p):x_o = (x2 + x5) / 2y_o = (y2 + y5) / 2A = ((x4 - x_o)**2 + (y4 - y_o)**2) ** 0.5A1 = 3 ** 0.5 / 2 * AT_module = ((x3 - x5)**2 + (y3 - y5)**2) ** 0.5# T 即为单位向量 t_53T = ((x3 - x5) / self.T_module,(y3 - y5) / self.T_module,)t_op = (x_p - x_o, y_p - y_o)x = abs(t_op[0] * T[0] + t_op[1] * T[1])y = abs(t_op[0] * T[1] - t_op[1] * T[0])if y > A or x > A1:return Falseif A < 3 ** 0.5 / 3 * x + y:return Falsereturn True

我做了几个点,测试了几次,感官上是对的。

如果有错误,请指出,不胜感谢!

piperLiu@qq.com

二维平面坐标系中,判断某点是否在正六边形内 | python 实现 + 数学推导(已知正六边形六个顶点坐标)相关推荐

  1. 给定数组,每个元素代表一个木头的长度,木头可以任意截断, 从这堆木头中截出至少k个相同长度为m的木块,已知k,求max(m)

    给定数组,每个元素代表一个木头的长度,木头可以任意截断, 从这堆木头中截出至少k个相同长度为m的木块,已知k,求max(m) [9, 4, 3, 10, 7] k = 5 max(m) = ? pub ...

  2. python 方差齐性检验_已知F和sig值_方差齐性 sig_如何判断方差齐性_怎么判断方差齐不齐...

    已知F和sig值,怎么判断方差齐性 用spss做两个独立样本的t检验,首先得到Levene的结果是 F=0.063,Sig=0.806 Q1:据说只用Sig(p)值判断,如果大于0.05,就是方差齐, ...

  3. python求近似值_python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配...

    已知一个元素,在一个list中找出相似的元素 使用场景: 已知一个其它来源的字符串, 它有可能是不完全与我数据库中相应的字符串匹配的,因此,我需要将其转为适合我数据库中的字符串 使用场景太绕了, 直接 ...

  4. (转)二维平面坐标系-最近点对模板

    插眼大佬博客:最近点对算法模板 - WThhhhh20 - 博客园 用法:将N个点读入后用cmpx函数排序,然后直接调用findMin函数即可,参数为(0,n-1),时间复杂度为nlogn 代码: c ...

  5. 如何在excel中判断某一点在某一区域内_SEM优化师常用的Excel表格函数集合

    在竞价优化中如何用最短时间又高效的完成工作呢?其实是有技巧的,今天给大家分享一篇能够帮助竞价员高效快速的完成工作的一些工具,如果感觉有用就赶快收藏吧! EXCEL使用技能 1. 数据透视表 ▲ 功能: ...

  6. matlab中已知X,Y,Z坐标,绘制等高线图

    本文采用的数据是2011年国赛的题目,使用每一点的x,y坐标,将其对应的每一元素的浓度作为z,绘制金属污染物的二维等高线图 以As为例,以下两个图形还使用了插值算法 load data%每一点坐标信息 ...

  7. 二维平面上判断点是否在三角形内

    1. 已知三角形的三个顶点坐标,判断某个点是否在三角形中(在三角形的边上,我们也视作在三角形中),本文给出了三种方法. 算法1:利用面积法 如上图所示,如果点P在三角形ABC的内部,则三个小三角形PA ...

  8. 已知空间中的三点 求三角形面积_三角形的面积公式八叙

    本文将给出一些使用解析几何和向量表达的三角形面积公式.我们将三角形放置在二维平面坐标系中, 并设其三点坐标为 , , ,如下图所示: 我们采用构造已知图形面积的方法来求解未知图形面积的方法,所以我们在 ...

  9. 4*4矩阵转换成二维平面坐标

    一.需求:基于苹果数据4*4矩阵数据,转换成二维平面坐标系 二.解决方法与步骤: 用到的方法: 1.Matrix4的转化_Catirl的博客-CSDN博客 2.平面内直角坐标系中坐标旋转变换公式_Er ...

最新文章

  1. 端到端基于图像的伪激光雷达3D目标检测
  2. Intel Realsense D435 python 测试是否能将pipeline、config、enable、start单独提出wait for frames循环外?(不能,配置必须全部在外)
  3. kafka 可视化工具_两小时带你轻松实战SpringBoot+kafka+ELK分布式日志收集
  4. boost::core::bit_width的测试程序
  5. argo 现水下永动机器人_现水下永动机器人 水下永动机器人有什么作用?
  6. 在Java 8中使用不带静态导入的Mockito
  7. nutch源代码阅读心得
  8. 【JSP开发】有关session的一些重要的知识点
  9. GraphLab:新的面向机器学习的并行框架
  10. MyBatis---动态SQL
  11. R 回归 虚拟变量na_互助问答第92期:虚拟变量问题
  12. 64位机器与32位机器的区别
  13. 部署Unbound实现DNS服务
  14. 网络安全笔记-17-单臂路由
  15. mt950报文解析_MT9**报文学习
  16. 41家大公司年度福利比较 大公司福利档案揭秘
  17. 华为西安鲲鹏服务器项目,眼见为实,华为鲲鹏架构服务器生态大揭秘
  18. 手机双清,三清,四清,五清,六清介绍
  19. python中反斜线是什么意思_Python中正反斜杠(‘/’和‘’)的意义与用法
  20. 局域网监控软件有哪些功能

热门文章

  1. php面向对象链,php面向对象之链式操作
  2. 【SQL】正则表达式-校验数字,字符,特殊需求等
  3. 【Kettle】作业和转换中的内置变量
  4. 【unity】解决 2d-extras 的 CustomRuleTileMenu 脚本报错的问题
  5. 安装slide后Powerpoint 不自动退出的解决方案
  6. 基于ajax请求异常捕获
  7. 微信扫码支付模式二【无法回调】解决方案(转)
  8. Java 图片处理解决方案:ImageMagick 快速入门教程
  9. maven构建ssm工程
  10. MTK: mtk 10A 建立socket连接问题