标签: intersection

求线段-矩形交点

简单地说,我有:

  • 视口矩形,其中 (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
查看次数

我在Python中对多边形点(约旦曲线定理)的改编是否正确?

问题

我最近发现需要确定我的点是否在多边形内部。所以我学习了C++中的这种方法并将其改编到Python中。但是,我认为我正在研究的 C++ 代码不太正确?我相信我已经解决了这个问题,但我不太确定,所以我希望比我聪明的人可以帮助我解决这个问题?

这个定理非常简单,其想法是这样的,给定一个闭合多边形,你画一条任意的线,如果你的点在里面,你的线将与边缘相交奇数次。否则,你将是均匀的并且它在多边形之外。非常酷。

我有以下测试用例:

    polygon_x = [5, 5, 11, 10]
    polygon_y = [5, 10, 5, 10]
    test1_x = 6
    test1_y = 6

    result1 = point_in_polygon(test1_x, test1_y, polygon_x, polygon_y)
    print(result1)

    test2_x = 13
    test2_y = 5
    result2 = point_in_polygon(test2_x, test2_y, polygon_x, polygon_y)
    print(result2)
Run Code Online (Sandbox Code Playgroud)

如果我将其定义如下,则上面的内容都会为 false:

            if polygon_x[i] < polygon_x[(i+1) % length]:
                temp_x = polygon_x[i]
                temp_y = polygon_x[(i+1) % length]
            else:
                temp_x = polygon_x[(i+1) % length]
                temp_y = polygon_x[i]
Run Code Online (Sandbox Code Playgroud)

这是错误的!我应该先为true然后result1falseresult2。很明显,有些东西很时髦。 …

python intersection polygon points python-3.x

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

通过将列值与另一个数组中不同键的列进行比较来过滤二维数组

我正在使用 2 个数组。第一个数组来自 CSV 文件的数据,另一个数组是来自 API 的响应。

是否可以使用数组 1 中的匹配值来过滤数组 2?

数组 1 示例

[
    ["B00CEEZ57S"],
    ["B002QJZADK"],
    ["B001EHL2UK"],
    ["B003FSTNB6"],
]
Run Code Online (Sandbox Code Playgroud)

数组 2 示例

[
    [
        "name" => "Jonathan Franzen: Purity (Hardcover); 2015 Edition",
        "ASIN" => "B002QJZADK"
    ],
    [
        "name" => "Cardinal Gates Outdoor Child Safety Gate, Brown",
        "ASIN" => "B00CE8C7SO"
    ],
    [
        "name" => "Sauder Edge Water 71.88\" Bookcase Estate Black Finish",
        "ASIN" => "B001EHL2UK"
    ],
    [
        "name" => "The Pioneer Woman 82695.03R Cowboy Rustic 8\" Rosewood Handle Can Opener, …
Run Code Online (Sandbox Code Playgroud)

php arrays intersection array-intersect

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

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
查看次数

HashSet&lt;int&gt; 和 List&lt;int&gt; 的快速交集

我有一个HashSet<int>和一个List<int>(Hashset 大约有 300 万个项目,List 大约有 300k 个项目)。

我目前使用它们相交

var intersected = hashset.Intersect(list).ToArray();
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更快的方法来做到这一点。也许并行?

c# algorithm performance intersection hashset

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

这可以用 O(n) 中的线扫描算法解决吗?

在这个问题中,我们给定平面中的 n 个水平线段,在 O(n) 时间内找到一条与所有线段相交并具有最大可能斜率的线,或者确定没有这样的线。

我想通过不等式求解并获得所有可能的线方程来找到所有可能的线,然后找到斜率最大的线,但是我找不到解决方案与我们在计算几何学中学到的任何东西有关谁能给我一个暗示或提及计算几何中任何可能有帮助的相关主题

geometry intersection segment computational-geometry

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

SIMD 指令,用于加速搜索两个已排序的 int 数组之间的匹配值,用于 Hadamard 乘积

我正在尝试实现两个数据集的最快连接,并在索引匹配时取值的乘积。我有一个标量方法,但我相信使用 SIMD 我可以加速这个算法。我有两个Span<int>必须匹配才能获取产品的密钥:aKeysbKeys. 如果 inaKeys中的值与 中的值相匹配,则应将 和 中bKeys的相应值相乘并存储。aValuesbValues

我期待使用SIMD指令能够从比较单一的钥匙aKeys在许多价值观bKeys。诀窍是,一旦 的值bKeys大于aKey我正在测试的值,我就需要移动到下一个aKey值。这是对这个问题的跟进。可以在此 repo 中找到带有基准代码的完整示例。

该算法IndexOf<T>SpanHelpers是接近,但它仅用于查找单个值。我试图利用这样一个事实,即我有几个要查找的值,所有值都是唯一的并且按升序排列。

// NOTE: The length of aKeys and aValues is the same.
// The length of bKeys and bValues is the same.
// The values in `aKeys` and `bKeys` are unique and sorted but not every value
// …
Run Code Online (Sandbox Code Playgroud)

algorithm f# intersection simd avx

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