标签: intersection

无交叉地连接偶数个节点

我有两组n个节点.现在我想将一组中的每个节点与另一组中的另一个节点连接起来.结果图应该没有交叉点.

我知道几种扫描线算法(Bentley-Ottmann-Algorithm来检查交叉点发生的位置,但除了蛮力方法之外,我找不到解决这些交叉点的​​算法.

一组中的每个节点可以连接到另一组中的任何其他节点.

任何解决这个问题的(一种有效的)算法的指针?无需实施.

编辑1:

以下是该问题的一种解决方案n=7:

交叉问题

黑点是一组节点,红点是一组.每个黑色节点必须连接到一个红色节点,以便连接它们的线不交叉.

EDIT2:

为了进一步说明:所有节点的位置都是固定的,结果图将有n个边.我也没有任何证据证明存在解决方案,但我无法创建一个没有解决方案的例子.我确信在那里有一个证据可以创建这样一个平面图.此外,只需要一种解决方案,而不是所有可能的解决方案.

algorithm intersection graph-theory line-segment planar-graph

6
推荐指数
1
解决办法
568
查看次数

求线段-矩形交点

简单地说,我有:

  • 视口矩形,其中 (0,0) 是左下角,(1,1) 是右上角,(0.5,0.5) 是屏幕中心。
  • 矩形外部的点 (a,b)。

这是在视口坐标中,因此 +X 位于右侧,+Y 位于屏幕上方。

我需要一个函数,它接受这些参数并返回矩形边缘上的线(矩形中心 (0.5,0.5) 和点 (a,b) 之间)相交的点。

我知道如何使用给定的坐标在纸上完成此操作,但当涉及到代码时我无法弄清楚。另外,我意识到这样的问题已经在不同的线程中得到解决 - 但我在任何地方都找不到简单的输入到输出函数。

我在 Unity3D 引擎中执行此操作,因此最好使用 Javascript,但任何语言或伪代码都会有很大帮助,因为我可能可以手动转换它。

编辑 为了澄清,我正在寻找类似的东西:

function IntersectFromViewportCenter(x : float, y : float) {
    ...
    return Point(x1, y1);
}
Run Code Online (Sandbox Code Playgroud)

其中 (x,y) 是圆外的点,(x1,y1) 是交点。

谢谢

geometry intersection unity-game-engine unityscript

5
推荐指数
1
解决办法
6277
查看次数

如何实现多个交集和并集剪辑

我正在开发一个用于特定目的的 SVG 转换器。SVG版本是1.1,有点旧,但我必须使用这个版本。

我很难尝试实现剪辑列表。

剪辑结构如下。

struct
{
    edgeList *path
    clip *intersect
    clip *union    
} clip
Run Code Online (Sandbox Code Playgroud)

任何剪辑对象都可以有相交剪辑或并集剪辑,或两者都没有(但不能同时具有两者)。因此,如果存在相交的剪辑,我必须使用该剪辑路径与父级相交。如果有联合剪辑,我必须将其与父级合并。

根据SVG规范,我可以通过定义两个clipPath元素并在另一个clipPath的clip-path属性中使用其中一个来使用两个剪辑的交集。可以实现联合,以便您在 ClipPath 元素内部定义两个路径。

现在,如果我得到多个剪辑路径怎么办?举例来说,其中 5 个,

  1. 前两个剪辑应彼此相交
  2. 第三个剪辑应与之前的结果结合起来
  3. 第 4 个剪辑应与前一个结果相交
  4. 第 5 个剪辑应与之前的结果结合起来

注意:合并后的黑色区域是最终的剪辑区域。

剪辑示例

我可以尝试这样实现。

<defs>
<clipPath id=cp1>
    <path>red</path>
<clipPath>
<clipPath id=cp2 clip-path="#cp3">
    <path clip-path="#cp1">green</path>
    <path>purple</path>    
<clipPath>
<clipPath id=cp3>
    <path>yellow</path>
<clipPath>
</defs>
Run Code Online (Sandbox Code Playgroud)

我被困在第五个剪辑了。

我该如何结合这个?此外,这种方法更难以编程方式实现。这个有更好的办法吗?如果没有其他办法,我想我将不得不将其作为 SVG 的限制而推迟。

union svg intersection clip

5
推荐指数
0
解决办法
838
查看次数

Google Earth Engine 中功能和功能集合剪辑的替代方案

我对 Google Earth Engine 非常陌生,我希望能够执行 ArcGIS 文档中所示的要素叠加分析:http://resources.esri.com/help/9.3/arcgisdesktop/com/gp_toolref/geoprocessing/overlay_analysis .htm

我似乎无法找到一种方法来帮助我在 GEE 中做到这一点。我有两个特征集合。两者都是大约 50 个多边形的集合,其中之一是研究地点,之一是区域,我想找出这些地点与区域重叠的位置,如果重叠,则该地点在每个重叠区域中所占的比例是多少。我尝试使用“交叉点”,但这仅显示站点和区域之间交叉点的面积。有一种“剪辑”方法可用于将站点剪辑到它们所在的区域,但这似乎仅适用于图像而不适用于要素集合。您对我如何做到这一点有什么建议吗?

谢谢

overlay intersection vector google-earth-engine

5
推荐指数
1
解决办法
5392
查看次数

与“any”类型的交集

[编辑]这个问题确实是重复的;请参阅链接帖子上@jcalz 的回答:)

TS github上的相关讨论:Allowing from any


操场

当我这样做时{ a: any } & { a: number },TypeScript 将其解析为{ a: any }. 但是,考虑到交集类型的含义,我认为它应该是{ a: number },因为只有numbertype 中的值实际上位于这两种类型的交集中。所以我不确定这种行为背后的理由 - 也许是因为any受到特殊对待?

intersection typescript

5
推荐指数
1
解决办法
1826
查看次数

两个列表中向量之间的元素部分交集

我有一个这样的列表:

mylist <- list(PP = c("PP 1", "OMITTED"),
           IN01 = c("DID NOT PARTICIPATE", "PARTICIPATED", "OMITTED"),                     
           RD1 = c("YES", "NO", "NOT REACHED", "INVALID", "OMITTED"),
           RD2 = c("YES", "NO", "NOT REACHED", "NOT AN OPTION", "OMITTED"),
           LOS = c("LESS THAN 3", "3 TO 100", "100 TO 500", "MORE THAN 500", "LOGICALLY NOT APPLICABLE", "OMITTED"),
           COM = c("BAN", "SBAN", "RAL"), 
           VR1 = c("WITHIN 30", "WITHIN 200", "NOT AVAILABLE", "OMITTED"),                         
           INF = c("A LOT", "SOME", "LITTLE OR NO", "NOT APPLICABLE", "OMITTED"),               
           IST = c("FULL-TIME", "PART-TIME", …
Run Code Online (Sandbox Code Playgroud)

intersection r list match

5
推荐指数
1
解决办法
417
查看次数

根据另一个 DataFrame 选择一个 DataFrame 的列

我试图根据另一个 DataFrame 的列选择 DataFrame 的子集。

数据框看起来像这样:

    a   b   c   d
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15
Run Code Online (Sandbox Code Playgroud)

   a  b
0  0  1
1  2  3
2  4  5
3  6  7
4  8  9
Run Code Online (Sandbox Code Playgroud)

我想获取第一个数据帧的所有行,以获取两个数据帧中包含的列。我的结果应该是这样的:

    a   b   
0   0   1   
1   4   5   
2   8   9  
3  12  13    
Run Code Online (Sandbox Code Playgroud)

python indexing intersection dataframe pandas

5
推荐指数
2
解决办法
1万
查看次数

Python3 就运行时而言,输入顺序对于 .intersection() 函数重要吗?

假设您有两个集合,set1 非常大(几百万个值),而 set2 相对较小(几十万个值)。如果我想使用 .interstion() 函数获取这两个集合之间的值的交集,是否会根据输入的顺序改进运行时?

例如,其中一个会比另一个运行得更快吗?

set1.intersection(set2)
set2.intersection(set1)
Run Code Online (Sandbox Code Playgroud)

python runtime intersection set python-3.x

5
推荐指数
1
解决办法
338
查看次数

Intersection Observer针对不同窗口大小进行微调

到目前为止,这是我的代码:

const mediaInViewport = document.querySelectorAll('.media');
const links = Array.from(document.querySelectorAll('.link'));
let actLink = links[0];

document.body.addEventListener('click', (event) => {
  if (event.target.tagName === 'a') {
    actLink.classList.remove('active');
    actLink = links.find(link => event.target.href === link.href)
    actLink.classList.add('active');
  }
}, false)

observer = new IntersectionObserver((entries, observer) => {
  entries.forEach((entry) => {
    if (entry.target && entry.isIntersecting) {
      const closestParent = entry.target.closest('section');
      if (closestParent) {
        actLink.classList.remove('active');
        actLink = links.find(link =>
          link.href.slice(link.href.lastIndexOf('#')) === `#${closestParent.id}`
        )
        actLink.classList.add('active');
      }
    }
  });
}, {
  threshold: 0
});

window.addEventListener('DOMContentLoaded', () => {
  setTimeout( // …
Run Code Online (Sandbox Code Playgroud)

javascript intersection intersection-observer

5
推荐指数
1
解决办法
1208
查看次数

AABB 与胶囊(扫掠球体)之间的交点

A我在 R3 空间中有一个由最小向量和 最大向量定义的轴对齐边界框,以及由具有端点和和半径的B线段定义的胶囊。我想检查这两个形状是否相交。abr

我知道如果胶囊的定义线段与 AABB 相交,这两个形状实际上会相交。然而,我该如何处理剩余的情况,其中线段不与 AABB 相交,但胶囊仍然与 AABB 相交。

geometry intersection computational-geometry

5
推荐指数
1
解决办法
1248
查看次数