多边形设门算法说明
title: 多边形设门算法说明 source: 流式细胞仪结题材料 author: 未知 size: 133.49 KB pages: 约1页 date: 2026-09-19 method: Python zipfile+XML解析 status: done original_path: /工作相关/液相芯片项目相关工作文档/流式细胞仪项目整理/11其他资料/流式结题材料/多边形设门算法说明.docx
核心内容
本文档说明了流式细胞仪中多边形设门(Polygon Gating)的算法实现,本质是判断点是否在多边形内部的几何计算问题。
算法用途
多边形设门用于细胞筛选,计算画布上代表细胞的点有哪些在多边形内部。
常用算法比较
| 算法 | 适用范围 | 特点 |
|---|---|---|
| 叉乘判别法 | 仅凸多边形 | 简单但受限 |
| 面积判别法 | 仅凸多边形 | 需计算面积和 |
| 角度和判别法 | 任意多边形 | 需三角函数运算 |
| 水平/垂直交叉点数判别法(射线法) | 任意多边形 | 最广泛应用 |
扫描线法(射线法)原理
基本思想:判断由点P发出的射线与多边形边的交点个数:
- 交点个数为奇数 → P点在多边形内
- 交点个数为偶数 → P点在多边形外
- 点在多边形边上 → 视为在多边形内部
特殊情况处理:
-
射线穿过顶点:交点会被算作2次,处理办法是如果P的纵坐标与P1,P2中较小的纵坐标相同,则直接忽略
-
射线与边平行:无交点或无数交点,直接忽略
-
射线与边竖直:若P的横坐标小于P1,P2的横坐标,则必然相交
-
点P在边上:直接得出结论——P在多边形内部
算法流程
已知点p(x,y)和多边形Polygon(x1,y1;x2,y2;…xn,yn)
① 以p为起点,以无穷远为终点作平行于X轴的直线line(x,y; -∞,y)
② 循环取得多边形的每一条边side(xi,yi;xi+1,yi+1)
- 判断是否平行于X轴,如果平行则continue
- 否则i++
③ 同时判断p(x,y)是否在边(P1,P2)上
- 如果是,返回1(点在多边形上)
- 否则继续
④ 判断线side与line是否有交点
- 如果有则count++
- 否则i++
⑤ 判断交点总数
- 奇数 → 返回0(点在多边形内)
- 偶数 → 返回2(点在多边形外)
直线平行判断简化
由于只涉及直线段(射线也被简化为长线段),判断直线是否水平只需比较线段起始点的y坐标是否相等;判断直线是否垂直只需比较x坐标是否相等,无需计算斜率。
应用效果
多边形设门筛选后可得到如图3所示的细胞分布图,用于进一步分析特定细胞群体。