问题标签 [labeling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - 标记三角形网格边缘的算法
介绍
作为较大程序(与渲染体积图形相关)的一部分,我有一个小但棘手的子问题,其中需要以特定方式标记任意(但有限)三角形 2D 网格。不久前,我写了一个解决方案(见下文),这对于我当时的测试网格来说已经足够好了,尽管我意识到这种方法可能不适用于人们能想到的每一个可能的网格。现在我终于遇到了一个网格,目前的解决方案根本不能很好地执行它——看起来我应该想出一种完全不同的方法。不幸的是,我似乎无法重新调整我的思路,这就是为什么我想在这里问的原因。
问题
考虑下面的图片。(颜色不是问题的一部分;我只是添加它们以改善(?)可视化。此外,变化的边缘宽度是完全不相关的伪影。)
对于每个三角形(例如,橙色 ABC 和绿色 ABD),三个边中的每一个都需要被赋予两个标签之一,例如“0”或“1”。只有两个要求:
- 并非三角形的所有边都可以具有相同的标签。换句话说,对于每个三角形,必须有两个“0”和一个“1”,或者两个“1”和一个“0”。
- 如果一条边由两个三角形共享,则两者的标签必须相同。换句话说,如果图片中的边 AB 为三角形 ABC 标记为“0”,那么它也必须为 ABD 标记为“0”。
网格是真正的 2D 网格,它是有限的:即,它不包裹,并且具有明确定义的外边界。显然,在边界上满足要求很容易——但在内部就变得更加困难。
直觉上,看起来至少应该存在一种解决方案,即使我无法证明这一点。(通常有几个——任何一个都足够了。)
当前解决方案
我目前的解决方案是一个非常强力的解决方案(此处提供只是为了完整性——请随意跳过本节):
- 维护四组三角形——每个可能计数 (0..3) 的剩余边要标记一组。一开始,每个三角形都在其中三个边需要标记的集合中。
- 只要存在带有未标记边的三角形:
找到仍然存在三角形的最小非零数量的未分配边。换句话说:在任何给定时间,我们都尽量减少已部分完成标记的三角形的数量。剩余的边数将在 1 到 3 之间。然后,只需选择一个这样的三角形,其中剩余的特定边数要分配。对于此三角形,请执行以下操作:- 看看是否有任何剩余边的标签已经被其他三角形的标签强加了。如果是这样,请按照上述要求 #2 所暗示的方式分配标签。
- 如果这导致了死胡同(即,对于当前三角形,要求#1 不能再满足),那么从头开始整个过程。
- 按如下方式分配任何剩余边:
- 如果到目前为止还没有标记边缘,则随机分配第一个。
- 当一个边缘已经分配时,分配第二个边缘,使其具有相反的标签。
- 当分配两条边时:如果它们具有相同的标签,则分配第三条具有相反的标签(显然);如果两者有不同的标签,则随机分配第三个。
- 为不同数量的未分配边更新三角形集。
- 如果我们到达这里,那么我们有一个解决方案——万岁!
通常这种方法只需要几次迭代就可以找到解决方案,但最近我遇到了一个网格,该算法仅在重试一两千次后才会终止......这显然表明可能存在它永远不会终止的网格.
现在,我希望有一个确定性算法,可以保证总能找到解决方案。计算复杂度不是那么大的问题,因为网格不是很大,并且标记基本上只需要在加载新网格时完成,这不会一直发生 - 所以具有(例如)指数的算法复杂性应该没问题,只要它有效。(当然:效率越高越好。)
谢谢你读到这里。现在,任何帮助将不胜感激!
编辑:基于建议解决方案的结果
不幸的是,我无法让Dialecticus 建议的方法起作用。也许我没弄对……不管怎样,考虑下面的网格,起点用绿点表示: 让我们放大一点…… 现在,让我们开始算法。第一步之后,标签看起来像这样(红色=“星号路径”,蓝色=“环形路径”): 到目前为止一切都很好。第二步之后: 第三 步: ……第四 步: 但是现在我们有问题了!让我们再做一轮 - 但请注意以洋红色绘制的三角形: 根据我目前的实现,洋红色三角形的所有边都在环形路径上,所以它们应该是蓝色的——这实际上是一个反例。现在也许我弄错了……但无论如何,最接近起始节点的两条边显然不能是红色的;如果第三个被标记为红色,那么该解决方案似乎不再适合这个想法。
顺便说一句,这是使用的数据。每行代表一条边,列解释如下:
- 第一个节点的索引
- 第二个节点的索引
- 第一个节点的x坐标
- 第一个节点的y坐标
- 第二个节点的x坐标
- 第二个节点的y坐标
起始节点是索引为 1 的节点。
我想接下来我应该尝试Rafał Dowgird 建议的方法......但也许我应该在一段时间内做一些完全不同的事情:)
svn - TeamCity - SVN 和标签:如何正确执行?
我已经阅读了 SO 中的所有 TeamCity、SVN 和标签问题,但没有一个接缝适用于我的具体问题。
在这里,我们在 SVN 上有以下结构:
在 TeamCity 上,我为项目 A 配置了一个 SVN 根,如下所示:
构建过程就像一个魅力。
但是现在我想添加标签,但甚至设置文档中指定的标签规则或我知道的任何其他设置,至于我最近的尝试:
我收到以下错误:
有谁知道为什么会发生这种情况,或者我该如何正确设置?
及时:访问 SVN 的用户正确地进行了检出,因为 TeamCity 被配置为在每次构建之前清理检出文件夹。
map - Geoserver TextSymbolizer 渲染问题?
我使用 geoserver 2.0.1,我使用 textsymbolizer 来标记地图上的特征。很可能 geoserver 不支持 '' 标签,因为我尝试更改字体大小、字体系列或 .. 它不起作用。如何对具有不同样式的特征进行标记?
android - android中的连接组件标签
我正在创建一个与从图像中提取车牌相关的 android 应用程序。我遵循的提取车牌的算法是基于图像中对象(blob)的连接组件标签。在 matlab 中,我可以使用 bwlabel() 轻松执行 CCL,但在 android (eclipse IDE) 中找不到类似 bwlabel 的东西
是否有一些预定义的方法或任何其他方式可以帮助我在 Android 中标记图像中的对象?
whitelist - 对于网站的自我监管内容标签,是否有任何替代 ICRA 的方法?
我正在与一个赌博网站合作,该网站历来使用ICRA 词汇表标记自己,并用RDF和PICS标签表示。据我了解,这些标签被Internet Explorer 6 Content Advisor等系统解释为阻止网站访问。
不幸的是,ICRA 的标签计划似乎已经失效,正如ICRA 主页所证明的那样。
ICRA 标签引擎已停止使用。虽然所有当前标签将继续与 Internet 内容过滤器一起使用,但 ICRA 标签生成器、ICRA 工具和网站管理员支持将不再可用。
标签可能仍然有效,但无法生成任何新的 RDF 文件。此外,PICS 已被称为POWDER的东西取代。
我的问题是:是否应该使用其他自我标记方案将网站内容识别为包含语言、暴力、成人内容、潜在有害内容(如赌博等)?Netnanny 和 Cybersitter 等产品是否需要这些方案,或者它们是否会根据 url 白名单阻止内容?
更新:我确实找到了一些可能的替代方案,但尚未评估它们的用处:
performance - opengl 文本标注的技术和速度预期
我正在使用 opengl(固定功能管道),我正在绘制可能数十万个点,并用文本标签标记每个点。这个问题是关于我是否以合理的方式这样做,以及在速度方面我可以期待什么。
通过为每个字符创建一个纹理坐标矩形来绘制文本标签,并使用一个小的字体位图对矩形进行纹理化(每个字符在纹理中约为 5x13 像素)。
在一个测试文件中,我有大约 158,000 个点,以经度和纬度给出,所以这个 lon/lat 空间是我的“模型空间”。我读取了这些点,并为它们创建了一个 opengl 顶点缓冲区。然后每个点都会得到一个标签,通常是三个或四个字符长。所以,假设平均 3.5 个字符。这些点以屏幕坐标绘制(正射投影模式)。对于每个角色,我创建一个纹理坐标 rect 以获取角色的正确像素,并在屏幕坐标中创建一个矩形,角色将被绘制到该矩形中。这两组矩形分别被放入一个顶点缓冲区。所以这是 158k * 3.5 * 8 = 440 万个点,或 880 万个用于绘图矩形的单独坐标数,还有 880 万个用于纹理坐标的数字。
当需要渲染时,我需要(至少我相信这是唯一的方法)更新所有这些绘图矩形的屏幕坐标,以匹配所有模型点的当前屏幕位置。所以这意味着对于 158 个模型点中的每一个,我必须从该点的模型(世界)坐标计算投影(屏幕)坐标,然后为该点的三个或四个字符矩形中的每一个设置四个角坐标. 所以基本上我会在每次渲染时更新所有 880 万个这些数字。每次渲染大约需要 0.3 秒来更新这些数字。
问题一:这听起来像是在opengl中处理点标记的正确/必要方式吗?如果有某种方式说“自动渲染到这组矩形点中,这将是理想的,这些矩形点链接到这个模型点但被视为与投影模型点的屏幕偏移”。然后我就不必在每个渲染上更新绘制矩形。但是没有这样的事情,对吧?
问题二:除了在每次渲染之前更新所有这些屏幕矩形的时间之外,当所有 158k 标签都显示在屏幕上时,渲染本身大约需要 1 秒(这显然不是有用的用户体验,但我只是想了解这里的速度)。随着我放大,屏幕上实际绘制的点/标签越来越少,渲染时间也相应缩短。我只是想了解,在我的普通/现代笔记本电脑上,使用普通/现代 GPU,整整一秒听起来是否是渲染那些 158k * 3.5 = 553k 纹理四边形的合理时间。我知道人们谈论“数百万个三角形”不是障碍,但我想知道我看到的纹理速度是合理/预期的。
谢谢你的帮助。
在下面添加了代码。请注意,这position_labels
是我想摆脱的每个渲染的调用。
list - 列表域和标签的序言列表
L=[[X,Y,Z],[1,A,B],[2,C,D]], L ins 1..3, all_different(L), label(L)。
我只想用值填充列表列表中的变量。get_element_at(L,1)
是否有任何解决方案可以以比等等更简单的方式获取列表的元素(它们是列表) ?
opengl - opengl 地图应用程序中的标签
简洁版本
如何在 OpenGL 映射应用程序中绘制短文本标签,而无需在用户放大和缩小时手动重新计算坐标?
长版
我有一个基于 OpenGL 的映射应用程序,我需要能够在其中绘制多达 250k 点的数据集。每个点都可以有一个短文本标签,通常大约 4 或 5 个字符长。
目前,我使用包含所有字符的单个文本来执行此操作。对于每个点,我为其标签中的每个字符定义一个四边形。因此,带有“Fred”标签的点将有四个与之关联的四边形,每个四边形使用纹理坐标到该单个纹理中来绘制其对应的字符。
当我绘制地图时,我在地图坐标(例如,经度/纬度)中绘制地图点本身。然后我计算屏幕坐标中每个点的位置,并更新每个点的标签四边形的四个角点,再次在屏幕坐标中。(例如,如果我确定该点在屏幕点 100、150 处绘制,我可以将点标签中第一个字符的四边形设置为从左上点 105、155 开始且宽度为6 像素和 12 像素的高度,适合特定字符。然后第二个字符可能从 120、155 等开始。)然后,一旦所有这些标签字符四边形都正确定位,我使用正交屏幕绘制它们投影。
问题是更新所有这些字符四边形坐标的过程很慢,对于具有 150k 点的特定测试数据集大约需要半秒(这意味着,由于每个标签大约有四个字符长,所以大约有 150k * [每点 4 个字符] * [每个字符 4 个坐标对] 每次更新时需要设置的坐标对。
如果地图应用程序不涉及缩放,我不需要在每次刷新时重新计算所有这些坐标。我可以只计算一次标签坐标,然后简单地移动我的查看矩形以显示正确的区域。但是对于缩放,如果不进行坐标计算,我看不到如何使它工作,因为否则角色会在放大时变大,在缩小时变小。
我想要的(以及我理解 OpenGL 没有提供的)是一种告诉 OpenGL 应该在固定的屏幕坐标矩形中绘制四边形的方法,但是该矩形的左上角位置应该是固定距离地图坐标空间中的给定点。所以我想要一个原始层次结构(给定的地图点是它的标签字符四边形的父级)和在这个层次结构中混合两个不同坐标系的能力。
我试图了解是否有一些我可以设置的魔法转换矩阵可以完成这一切,但我不知道该怎么做。
我考虑的另一种选择是在每个点上使用着色器来处理计算该点的标签字符四边形坐标。我以前没有使用过着色器,我只是想了解 (a) 是否可以使用着色器来执行此操作,以及 (b) 在着色器代码中计算所有这些点是否真的比我自己计算它们更重要. (顺便说一句,我已经确认最大的瓶颈是计算四边形坐标,而不是将更新的坐标上传到 GPU。后者需要一些时间,但它是计算,更新的坐标的绝对数量,占据了那半秒的大部分时间。)
(当然,另一种选择是更聪明地了解首先需要在给定视图中绘制哪些标签。但现在我想专注于解决方案,假设所有标签都需要绘制。)
php - 在 PHP 中从 Word 模板生成 Word 文档的最佳方法是什么?
我在 Word 文档中有一个 Avery 文具风格的模板。我想做的是用图像(在本例中为 QR 码)填写模板,以便于打印和标记对象。
我想知道,最简单的方法是什么?我将模板保存为Word XML文件,但看着文件,我感到绝望。我还尝试将模板转换为 HTML,但不出所料,它搞砸了格式。我不确定下一步要去哪里,有什么想法吗?
c# - 复选框网格值到标签
我正在尝试监视复选框网格以收集选中状态的任何实例。如果我看到这些检查状态中的任何一个,我会增加一个计数器并将其放入标签中。例子:
-user 有一个复选框可供选择。
-用户选择几个框。
- 每次选择一个框时,窗口的标签都会增加并显示当前选择的框数。
-user 取消选中一个复选框。窗口标签会相应更新。