标签: intersection

具有移动球体的射线球测试的良好加速结构

我正在寻找适当的加速结构来进行射线球交叉测试(在游戏中).以下条件适用:

- 每帧有100个球体和100个射线相互测试

- 球体在每一帧中移动,射线也是如此

- 可以在每个帧中添加/删除光线/球体(但是它们中的大部分在两个帧之间是相同的,只是略微移动)

- 全是3D的东西

一个KD-Tree非常适合Ray交叉测试,但是由于球体移动,我必须在每个帧中重建KD树,这是昂贵的

Oct-tree更易于维护,但对于光线交叉测试非常无效.

对100个球体的100条射线似乎并不多,但我在非常低的资源上编码,所以我正在寻找一些加速度

有人可以给我一些提示吗?

intersection acceleration

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

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

线与球体之间的交点

我试图找到一个球体和一条线之间的交点,但老实说,我不知道该怎么做.有人可以帮我这个吗?

math geometry intersection

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

检查C++中的map是否包含来自另一个映射的所有键

我打算在C++中使用两个类型的地图:std::map<char, Node>,其中Node是一个自定义类.假设我有两个地图,m1并且m2上面的类型,我想知道是否m1包含所有m2.换句话说,我想验证m1和的键集的交集是否与键m2的集合相同m2.

我可以遍历所有键m2并执行find()或者count()执行m1,但这看起来像是浪费,可能会很慢.我这样说是因为密钥以排序顺序存储为二进制搜索树std::map,因此每个查找/计数将采用O(logn),而对于下一个密钥m2,密钥中的相同路径m1将必须从一开始就被遍历.

我是STL的新手,所以请原谅我对一些应该很容易实现的东西的无知.此外,一些简单的示例代码片段或代码片段链接将非常有助于更好地理解.我不能使用非标准库,包括boost.

提前致谢!

c++ stl intersection map set

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

三角形 - 二维方形交点试验

如何测试三角形和正方形是否相互交叉?

当我们知道它是方形而不是矩形时,有没有什么方法可以优化它?此外,方形是轴对齐的,这样可以提高性能吗?

或者我应该将正方形分成三角形,并进行两次三角形 - 三角形相交检查?

编辑:澄清:我正试图检查这两个形状是否以任何方式相互重叠.所以三角形可以在正方形内,正方形可以在三角形内部,并且它也应该返回true.

c++ math geometry intersection collision-detection

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

如何使用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
查看次数

Java游戏Hitbox检测和圆角

我正在研究一个简单的2D游戏,包括Java,swing和没有框架.我有一个矩形播放器,用户可以四处移动.在地图上是玩家不应该经历的几个障碍.我通过为玩家制作一个新的矩形对象以及每个障碍物来实现这一点.但我不确定这是否是正确的方法.它有效,但玩家的动作并不是真正的用户友好.如果玩家想要通过两个障碍物,他们必须在完美的坐标上通过.

用Rectangle对象检查玩家和障碍物之间的交叉点是否是一个好主意,还是应该以另一种方式进行?

现在我的第二个问题:
我想用相同的hitbox替换矩形的hitbox,但是有圆角,这样玩家可以更轻松地通过.

启用了hitbox的游戏
这是游戏在启用了hitbox的情况下的样子.

检查玩家和障碍物是否相交的代码:

for (Player p : this.getPlayerArray()) {
    Rectangle recPlayer = p.playerBounds();
        for (Obstacle kiste : obstacleArray) {
            Rectangle recKiste = kiste.obstBounds();

            if (recPlayer.intersects(recKiste)) {
                p.setX(100); //Not actual code here
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

返回播放器/障碍物的hitbox的功能:

public Rectangle obstBounds() {
    return new Rectangle(this.getX(), 
    this.getY(), image.getImage().getWidth(null), 
    image.getImage().getHeight(null));
}
Run Code Online (Sandbox Code Playgroud)

java swing intersection rectangles

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

Ruby - 数组交集(带有重复项)

我有array(1 and 2).我怎么array3能从他们那里得到的?

array1 = [2,2,2,2,3,3,4,5,6,7,8,9]

array2 = [2,2,2,3,4,4,4,4,8,8,0,0,0]

array3 = [2,2,2,3,4,8]
Run Code Online (Sandbox Code Playgroud)

array1 & array2返回[2,3,4,8],但我需要保留重复.

ruby arrays intersection

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

两个数据帧中索引的公共元素数

我有以下三个数据帧:

df_A = pd.DataFrame( {'id_A': [1, 1, 1, 1, 2, 2, 3, 3], 
                    'Animal_A': ['cat','dog','fish','bird','cat','fish','bird','cat' ]})

df_B = pd.DataFrame( {'id_B': [1, 2, 2, 3, 4, 4, 5], 
                    'Animal_B': ['dog','cat','fish','dog','fish','cat','cat' ]})

df_P = pd.DataFrame( {'id_A': [1, 1, 2, 3], 
                      'id_B': [2, 3, 4, 5]})

df_A

    id_A    Animal_A
0   1       cat
1   1       dog
2   1       fish
3   1       bird
4   2       cat
5   2       fish
6   3       bird
7   3       cat

df_B

    id_B    Animal_B
0   1       dog
1   2       cat
2 …
Run Code Online (Sandbox Code Playgroud)

python intersection pandas

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

CSS - 颜色divs交集

我想知道纯CSS中是否存在一个解决方案来为两个div之间的交集着色.

例如,如果我有两个div,使用相同的类:

<div class="orange_square"></div>
<div class="blue_square"></div>
Run Code Online (Sandbox Code Playgroud)

它们被放置在页面上,因此它们重叠,如下所示:

在此输入图像描述

我希望这两个div的交集用红色着色,这只在CSS中.我想知道这样的事情是否存在:

.orange_square {
   background-color:orange;
}
.blue_square {
   background-color:blue;
}
.orange_square [overlap_operator?] .blue_square {
   background-color:red;
}
Run Code Online (Sandbox Code Playgroud)

那可能吗?

html css intersection overlap

6
推荐指数
2
解决办法
2115
查看次数