我正在研究流式细胞仪。我正在使用 python 的 fcs 模块。
我想为创建的图形创建不同的门。
我无法理解如何创建“自由形式”门。
如果有人有任何自由形式门控或任何与 py-fcm 相关的门控示例,还请告诉我。
在这里,我有兴趣了解如何从自由形式的门控中获取该区域。
以供参考。
http://packages.python.org/fcm/basic.html#gating-and-working-withe-the-view-tree
我正在研究流式细胞仪。我正在使用 python 的 fcs 模块。
我想为创建的图形创建不同的门。
我无法理解如何创建“自由形式”门。
如果有人有任何自由形式门控或任何与 py-fcm 相关的门控示例,还请告诉我。
在这里,我有兴趣了解如何从自由形式的门控中获取该区域。
以供参考。
http://packages.python.org/fcm/basic.html#gating-and-working-withe-the-view-tree
自由形式的门实际上是一个多边形门,在创建门时鼠标经过的每个点都有一个顶点。如果您可以创建多边形门,那么您可以创建自由形状门;只要你有足够的顶点。由于您还询问了如何创建其他门类型,我怀疑您真正的问题是如何执行门。
要执行门控,您必须确定哪些事件位于指定区域内。矩形区域是最容易处理的。用于识别事件是否在矩形区域中的伪代码可能如下所示:
EventInRectRegion (event e, region r)
return (((e[r.xParam] >= r.xMin) && (e[r.xParam] < r.xMax)) &&
((e[r.yParam] >= r.yMin) && (e[r.yParam] < r.yMax)))
您应该能够看到确定事件是否在矩形中与用于确定任何点是否在任何几何形状内的代码类型相同。这种类型的代码用于鼠标点击测试和其他相关任务。
将此扩展到圆形、多边形和其他形状需要遵循相同的路径。以诸如多边形中的点之类的算法为例。对于圆,您可以将圆表示为多边形,然后使用该算法,或者您可以在圆算法中找到一个点。
我希望当您进一步研究此问题时,您会发现性能是一个问题。我链接的 Point in Polygon 文章显示了几种不同的算法,其中主要关注的是以性能换取速度。您必须就您希望如何执行此命中测试以及您想要做出哪些权衡做出一些决定。
例如,您可以准确地测试每个事件(就像我在伪代码中所做的那样)。这是准确的,但需要您每次都评估边界。另一种算法是选择位图分辨率并在其中渲染区域。然后,您可以通过测试给定的位图像素是打开还是关闭来测试事件是否在该区域中。这允许您只评估一次区域渲染数学,但以位图的内存和命中测试中的一些精度为代价。