我正在寻找适当的加速结构来进行射线球交叉测试(在游戏中).以下条件适用:
- 每帧有100个球体和100个射线相互测试
- 球体在每一帧中移动,射线也是如此
- 可以在每个帧中添加/删除光线/球体(但是它们中的大部分在两个帧之间是相同的,只是略微移动)
- 全是3D的东西
一个KD-Tree非常适合Ray交叉测试,但是由于球体移动,我必须在每个帧中重建KD树,这是昂贵的
Oct-tree更易于维护,但对于光线交叉测试非常无效.
对100个球体的100条射线似乎并不多,但我在非常低的资源上编码,所以我正在寻找一些加速度
有人可以给我一些提示吗?
我在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) 我试图找到一个球体和一条线之间的交点,但老实说,我不知道该怎么做.有人可以帮我这个吗?
我打算在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.
提前致谢!
如何测试三角形和正方形是否相互交叉?
当我们知道它是方形而不是矩形时,有没有什么方法可以优化它?此外,方形是轴对齐的,这样可以提高性能吗?
或者我应该将正方形分成三角形,并进行两次三角形 - 三角形相交检查?
编辑:澄清:我正试图检查这两个形状是否以任何方式相互重叠.所以三角形可以在正方形内,正方形可以在三角形内部,并且它也应该返回true.
我的表是:
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 exists
或where not exists
因为我需要编写关于相同where not in
或where 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) 我正在研究一个简单的2D游戏,包括Java,swing和没有框架.我有一个矩形播放器,用户可以四处移动.在地图上是玩家不应该经历的几个障碍.我通过为玩家制作一个新的矩形对象以及每个障碍物来实现这一点.但我不确定这是否是正确的方法.它有效,但玩家的动作并不是真正的用户友好.如果玩家想要通过两个障碍物,他们必须在完美的坐标上通过.
用Rectangle对象检查玩家和障碍物之间的交叉点是否是一个好主意,还是应该以另一种方式进行?
现在我的第二个问题:
我想用相同的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) 我有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]
,但我需要保留重复.
我有以下三个数据帧:
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) 我想知道纯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)
那可能吗?