点与规则的矩形或者等边、等腰三角形等的碰撞检测很简单,本文主要是介绍“点与多边不规则图形的碰撞检测”。

如图,这个多边形已经相当复杂,包含凸和凹,该如何解决呢?

结论:使用交点数判断。即从碰撞点发射出一条水平射线,计算这条射线和多边形的交点数,如果是奇数说明点在多边形内部,反之则在外部。


代码如下:

/*** JS 代码* 判断点是否在多边形内* 求解通过该点的水平线与多边形各边的交点* 单边交点为奇数,成立* IVector2:封装数学库,包含x,y两个变量* Array:数组* @param pos 传入点的坐标pos.x, pos.y* @param posPolygon  多边形的各个顶点坐标* @param count 多边形顶点的个数
*/
public static PointInPolygon( pos:IVector2, posPolygon:Array<IVector2>, count:int ):boolean
{let cross: int = 0; //交点个数for( let i = 0; i < count; i++ ){let p1: IVector2 = posPolygon[i];let p2: IVector2 = posPolygon[(i + 1) % count]; //下一个节点// p1p2这条边与水平线平行if( p1.y == p2.y )continue;// 交点在p1p2的延长线上if( pos.y < Math.min( p1.y, p2.y ) )continue;// 交点在p1p2的延长线上if( pos.y > Math.max( p1.y, p2.y ) )continue;// 计算交点 X 左边 : (p2.y - p1.y)/(p2.x - p1.x) = (y - p1.y)/(x - p1.x)// 直线 K 值相等, 交点y = pos.ylet x = (pos.y - p1.y) * (p2.x - p1.x) / (p2.y - p1.y) + p1.x// 只统计单边交点,即点的正向方向if(x > pos.x)cross ++;}return cross % 2 == 1;
}

多边形碰撞检测(判断点在多边形内)相关推荐

  1. php之判断点在多边形内的api

    1.判断点在多边形内的数学思想:以那个点为顶点,作任意单向射线,如果它与多边形交点个数为奇数个,那么那个点在多边形内,相关公式: <?php class AreaApi{//$area是一个多边 ...

  2. 判断点与多边形的关系(3):角度和法

    "角度和法"的思路是:多边形内的点,与所有顶点顺次连接形成向量的夹角之和为2π. 图例说明,如下图所示: O点在多边形之内,其与多边形所有顶点的连线,组成6个向量,顺次形成6个向量 ...

  3. 判断点与多边形的关系(1):向量积法

    判断点与多边形的关系,是计算几何的经典问题,点与多边形的关系可以分为:点在多边形内(inside).点在多边形外(outside)以及点在多边形的边上(onside)三种. 在图像处理系统中,如果通过 ...

  4. Html5多边形相交判定,多边形相交判断算法

    一.规则 判断两多边形是否相交,排除边边重合.以及断点与边重合的情况 二.示意图 示意图.png 三.算法代码(js) /** * 判断两个多边形是否相交(边边重合,点边重合除外) * 核心算法:1- ...

  5. c#实现 改进弧长法判断点在多边形里面

    一.开发环境: VS2017,C# winform窗口程序 二.不同点 和网上的介绍不同,我也 不清楚是为什么,我去实现别的博客的思路,始终是在象限相差为2的地方会判断不正确,所以我自己思考了一种方法 ...

  6. 辐角原理判断点和多边形的关系

    辐角判断点和多边形的关系 一.辐角原理 二.适用条件 三.算法效果 四.matlab代码实现 \qquad标题写的多边形,然而在现实情况中多边形只是该问题的一个子集:我们先讲点和连通域的关系,点和多边 ...

  7. 判断点集与多边形的位置关系

    判断点集与多边形的位置关系 点集与凸多边形 点集与一般性多边形 点集与凸多边形 点集或者是点与多边形位置关系无非就三种 点在多边形的内部 点在多边形的外部 点在多边形上 一般如果该多边形是凸的那么我们 ...

  8. 判断点在多边形内外的简单算法

    发信人: RovingCloud (寻找当年的OI感觉), 信区: ACMICPC 标  题: [原创]惊喜发现判断点在多边形内外的超简单算法 发信站: 逸仙时空 Yat-sen Channel (W ...

  9. 判断两个多边形相交的面积_聊聊3D模型组件—顶点,边,多边形

    3D模型设计 什么是3D模型? 3D模型是3D软件环境中任何三维对象(真实或虚构)的数学表示.与此不同,可以在专用软件套件中从任何角度查看3D模型,并且可以缩放,旋转或自由修改3D模型.创建和成形3D ...

  10. python判断点在四边形内

    只针对凸四边形: 如果是三角形,五边形呢?这个代码是否有效,还没测 import globclass Point():def __init__(self, x,y):self.x=xself.y=yd ...

最新文章

  1. 免费资源:Typicons-免费图标字体
  2. 转Java转iOS-第一个项目总结(2):遇到问题和解决方案
  3. 机器学习——Java调用sklearn生成好的Logistic模型进行鸢尾花的预测
  4. linux内核态串口读写程序,linux 0.11 内核学习 -- rs_io.s,串口汇编代码
  5. VS2010MFC - TeeChart经验总结(零基础入门到动态创建)
  6. 《剑指offer》第三十一题(栈的压入、弹出序列)
  7. idea中tomcat服务器的配置
  8. log4j每天产生一日志文件
  9. 25. 二叉树中和为某一个值的路径(C++版本)
  10. php网页顶端有乱码,四个常见html网页乱码问题及解决办法
  11. 姿态估计之CPN(Cascaded Pyramid Network)
  12. Django推导Django内部模块:wsgiref与jinja2
  13. linux驱动系列学习之DRM(十)
  14. 浏览器环境 兼容运行ES6语法
  15. Win10怎么默认用Windows照片查看程序打开图片
  16. C#的process进程的处理
  17. 笔记本WIN7建立共享wifi的简单方法
  18. 计算机视觉的最终表现!三维重建技术
  19. 华为鸿蒙系统p50,华为p50自带鸿蒙是什么意思_华为p50是鸿蒙系统吗
  20. 基于Linux2.6内核的嵌入式手持设备开机LOGO修改

热门文章

  1. 雷观(四):手机不可能取代电脑
  2. 小程序---声音库播放
  3. 【信息学奥赛】1033:计算线段长度(C++)
  4. 【帆软--软件介绍】
  5. 会计学利用计算机思维,会计思维确定性
  6. 谈谈智能手机软件(2):Linux手机软件
  7. 教你填写有说服力的QQ号码申诉资料(转)
  8. 单播、组播、广播三者之间的区别
  9. 检测固态硬盘性工具-AS SSD Benchmark提供下载
  10. 结构体和类的区别(待考究)