标签: intersection

在C++中获取联合,交集或集合的差异

我有几个关于如何使用C++集的问题(std :: set)

  1. 有没有办法获得两个C++集的并集,交集或差异?(编写我自己的函数很容易做到这一点,但我想知道它是否有内置函数)

  2. C++集可以用作地图中的键吗?

c++ intersection map set unions

7
推荐指数
2
解决办法
9863
查看次数

.NET确定鼠标在两个任意点之间绘制

我在Winform上的两个对象之间绘制了一个箭头.

确定我的鼠标当前是否在此行上方或附近悬停的最简单方法是什么.

我已经考虑过测试鼠标点是否与由两个点定义和外推的正方形相交,但是只有当这两个点具有非常相似的x或y值时,这才是可行的.

我也在想,这个问题可能更多地出现在线性代数领域而不是简单的三角学领域,虽然我确实记得矩阵的简单方面,但这个问题超出了我对线性代数的认识.

另一方面,如果.NET库可以处理该功能,甚至更好.

编辑 感谢您的回答,有一些非常好的,所有值得被标记为已回答.

我选择Coincoin的答案是被接受的,因为我喜欢它可以应用于绘制的任何形状,但最终实现了Tim Robinson的方程式,因为使用简单的方程而不是新建图形路径和笔似乎更有效,如我的情况我需要在onMouseMove上进行1-n个不同的关系(显然会有一些缓存和优化,但重点仍然存在)

等式的主要问题是它似乎将线条视为无限,因此我也添加了边界测试.

对于那些感兴趣的人来说,代码(初始剪切,我可能会稍微干掉它),如下所示

    if (Math.Sqrt( Math.Pow(_end.X - _start.X, 2) + 
           Math.Pow(_end.Y - _start.Y, 2) ) == 0)
    {
        _isHovering =
            new RectangleF(e.X, e.Y, 1, 1).IntersectsWith(_bounds);
    }
    else
    {
        float threshold = 10.0f;

        float distance = (float)Math.Abs( 
            ( ( (_end.X - _start.X) * (_start.Y - e.Y) ) -
            ( (_start.X - e.X) * (_end.Y - _start.Y) ) ) /
            Math.Sqrt( Math.Pow(_end.X - _start.X, 2) + 
            Math.Pow(_end.Y - _start.Y, 2) ));

        _isHovering = ( …
Run Code Online (Sandbox Code Playgroud)

.net geometry intersection

7
推荐指数
1
解决办法
202
查看次数

无限锥面*AABB交点测试

我正在尝试发现一种更快的算法,用于测试轴对齐的锥形表面是否与轴对齐的边界框的体积相交.

我开发的当前算法如下:

锥形,AABB,沿4个平行边的线和交叉点

  • x = 0
  • 对于AABB的任何4个平行边缘中的每一个:
    • 将其线与锥体相交.
    • 如果交叉点在AABB内:
      • 回归真实.
    • 如果交叉点位于AABB的特定一侧:
      • x + = 1
  • 如果x == 0或x == 4(所有交叉点都位于AABB的一侧):
    • 返回false.
  • 回归真实.

谁能想到一个更有效的?这似乎通过计算每个线路交叉点做了很多额外的工作.

编辑:

以上算法很糟糕,例如:

锥体击中未经测试的盒子轴

锥体只能与盒子的一个边缘交叉,使得所有轴线交叉点都在一侧,因此上述算法不起作用,除非测试所有边缘或智能选择要测试的边缘(可能是最接近锥体的边缘?).

编辑编辑:请参阅下面我自己的答案,我后面发现的解决方案对我来说似乎是最优的.

3d geometry intersection collision-detection

7
推荐指数
1
解决办法
2971
查看次数

找出两个线性拟合在R中相交的位置

我有两个线性拟合,我从我的R脚本中的lm调用中获得.例如...

fit1 <- lm(y1 ~ x1)
fit2 <- lm(y2 ~ x2)
Run Code Online (Sandbox Code Playgroud)

我想找到这两条线(fit1fit2)相交的(x,y)点,如果它们相交的话.

intersection r lm

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

一个更快的方法来实现intersect()给我的东西?

我发现在我的matlab函数中花费了大量时间在这段代码中:

intersect(freq_bins, our_bins);
Run Code Online (Sandbox Code Playgroud)

两者都可以是相当大的向量,并且仅由整数组成.我只需要知道两者中的整数.这确实是intersect()的原始目的,所以我怀疑答案是:它没有变得更好.但也许有人有一些建议.

optimization performance matlab intersection

7
推荐指数
1
解决办法
3196
查看次数

如何使用mysql中存在与否的方式实现交叉

我的表是:

customer(cid,name,city,state)
orders(oid,cid,date)
product(pid,productname,price)
lineitem(lid,pid,oid,number,totalprice)
Run Code Online (Sandbox Code Playgroud)

我想选择城市'X'的所有客户购买的产品.这意味着我需要交叉生活在城市'X'的所有客户购买的产品

示例:如果有3个客户c1,c2和c3我的答案是c1.product(intersect)c2.product(intersect)c3.product

我想实现这个只是使用where existswhere not exists因为我需要编写关于相同where not inwhere in不可用的关系演算.我的部分查询是这样的:

select 
  * 
from 
  product p,
  lineitem l,
  customer c1 
where 
  exists(
   select 
      * 
   from 
     customer c,
     orders o 
   where 
    o.cid=c.cid and 
    c.city='X' and 
    l.oid=o.oid and 
    l.pid=p.pid and 
    c1.cid=c.cid)
Run Code Online (Sandbox Code Playgroud)

以上查询为我提供了生活在X市的所有客户的pid,cid,oid,lid,totalprice,city,productname.现在我需要弄清楚如何选择所有客户共有的产品.

注意:

我不能使用任何聚合函数,因为它在关系演算中不可用.我有一个使用聚合函数的工作查询,这是

select 
   p.productname 
from 
   product p, 
   orders s, 
   lineitem l, 
   customer c 
where 
   l.pid=p.pid and
   l.oid=s.oid and 
   c.cid=s.cid and 
   c.city='X' 
group by 
   p.productname 
having 
   count(distinct c.cid)=(select count(*) from …
Run Code Online (Sandbox Code Playgroud)

mysql sql database intersection relational-database

7
推荐指数
1
解决办法
1437
查看次数

找到两个位置的交集

我想在Android中找到两个位置的交叉点.

我不想考虑图中所示的圆圈不相交或包含或完全重叠的情况.

我的问题是位置以度为单位,半径(精度)以米为单位给出.我不知道如何混合这些单位.

在我的情况下,环境是Android,但问题不是Android特定的.

带有Radiuses的位置,单位为m

math geometry gps intersection latitude-longitude

7
推荐指数
1
解决办法
1080
查看次数

如果字段数组和参数数组相交,则过滤MongoDb集合

我正在创建一个流星学习项目.其中有一个集合,其文档有一个名为keywords的属性,这是一个字符串数组.我有第二个字符串数组.我想以这种方式过滤集合,它只返回关键字数组与第二个数组相交的那些文档,即两个数组都有一个或几个相同的元素.可能吗?

arrays filtering intersection mongodb meteor

7
推荐指数
1
解决办法
3151
查看次数

Ray和Triangle Edge如何相交?

我面临着与三角形边缘相交的问题.实际上,我正在尝试使用鼠标选择/交叉网格的三角形,顶点,边缘.所以我从鼠标当前位置制作了光线,然后我将它与网格元素(如三角形/多边形,顶点,边缘等)相交以使用它.基本上,3D建模的东西.与三角形相交很简单有趣.顶点部分很棘手.

但现在,我不知道如何用三角形边相交/拾取.我的意思是我在与鼠标射线相交时如何对待它们?首先,我认为它们可以像3D线一样对待.但最终未能做到Ray和the Line相交.在互联网上搜索但没有找到任何有用的信息.虽然我发现一些开源项目正在使用OpenGL内置的拾取功能来选择/与Edge交叉.但就我而言,我无法使用它.:(

我当前的边缘选取代码结构如下所示:

void pickEdge(Ray ray, Scene scene)
{
    for each object in scene
    {
        mesh = getMesh(object)
        for each triangle in mesh
        {
            for each edge in triangle
            {
                v1 = getV1(edge)
                v2 = getV2(edge)

                // Do intersect with 'ray' and 'v1', 'v2'. But how?
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我被困在这里,真的需要一些帮助.非常感谢任何想法,算法或小帮助.

algorithm math 3d intersection ray-picking

7
推荐指数
1
解决办法
619
查看次数

Ray Tracer暗影问题

我正在研究一个光线追踪器,但我在阴影部分被困了几天.我的影子表现得很奇怪.这是光线跟踪器的图像:

在此输入图像描述

阴影的图象与两个球形的

黑色部分应该是阴影.

光线的原点总是(0.f,-10.f,-500.f),因为这是一个透视投影,它是相机的眼睛.当射线击中一个平面时,击中点始终是射线的原点,但是与球体不同.它是不同的,因为它基于球体的位置.平面和球体之间从不存在交叉,因为原点是巨大的差异.我也尝试在盒子上添加阴影,但这也不起作用.两个球体之间的阴影确实有效!

如果有人想看到交叉口代码,请告诉我.

感谢您抽出宝贵时间来帮助我!

相机

Camera::Camera(float a_fFov, const Dimension& a_viewDimension, vec3 a_v3Eye, vec3 a_v3Center, vec3 a_v3Up) :
m_fFov(a_fFov),
m_viewDimension(a_viewDimension),
m_v3Eye(a_v3Eye),
m_v3Center(a_v3Center),
m_v3Up(a_v3Up)
{
  // Calculate the x, y and z axis
  vec3 v3ViewDirection = (m_v3Eye - m_v3Center).normalize();
  vec3 v3U = m_v3Up.cross(v3ViewDirection).normalize();
  vec3 v3V = v3ViewDirection.cross(v3U);

  // Calculate the aspect ratio of the screen
  float fAspectRatio = static_cast<float>(m_viewDimension.m_iHeight) / 
                       static_cast<float>(m_viewDimension.m_iWidth);
  float fViewPlaneHalfWidth = tanf(m_fFov / 2.f);
  float fViewPlaneHalfHeight = fAspectRatio * fViewPlaneHalfWidth;

  // The bottom left of the plane
  m_v3ViewPlaneBottomLeft …
Run Code Online (Sandbox Code Playgroud)

c++ shader trace intersection

7
推荐指数
1
解决办法
186
查看次数