标签: intersection

射线盒交叉理论

我想确定光线和盒子之间的交点.该框由其最小3D坐标和最大3D坐标定义,并且光线由其原点和它指向的方向定义.

目前,我正在为盒子的每个面形成一个平面,我正在将光线与平面相交.如果光线与平面相交,那么我检查交叉点是否实际位于框的表面上.如果是这样,我检查它是否是此光线的最近交点,并返回最近的交点.

我检查平面交叉点是否在盒子表面上的方式是通过一个函数

bool PointOnBoxFace(R3Point point, R3Point corner1, R3Point corner2)
{
  double min_x = min(corner1.X(), corner2.X());
  double max_x = max(corner1.X(), corner2.X());
  double min_y = min(corner1.Y(), corner2.Y());
  double max_y = max(corner1.Y(), corner2.Y());
  double min_z = min(corner1.Z(), corner2.Z());
  double max_z = max(corner1.Z(), corner2.Z());
  if(point.X() >= min_x && point.X() <= max_x && 
     point.Y() >= min_y && point.Y() <= max_y &&
     point.Z() >= min_z && point.Z() <= max_z)
     return true;

  return false;
}
Run Code Online (Sandbox Code Playgroud)

哪个corner1是该框面的矩形的一角,corner2是对面的角.我的实现大部分时间都在工作,但有时它给了我错误的交集.请看图片:

替代文字

图像显示来自相机眼睛并撞击盒子表面的光线.其他光线是盒子表面的法线.可以看出,特别是一条光线(它实际上是看到的法线)从盒子的"背面"出来,而法线应该从盒子的顶部出来.这似乎很奇怪,因为有多个其他光线正确地击中了盒子的顶部.

我想知道我正在检查交叉点是否在盒子上的方式是正确的还是我应该使用其他算法.

谢谢.

algorithm 3d raytracing intersection

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

如何在目标C中交叉两个数组?

我有两个数组.Array1包含15个对象,Array2包含4个对象.两个数组都有两个常见的对象,我只想得到那两个对象的结果数组.

它应该像两个Set的交集,但是如何在Objective C中为数组做..?请帮忙.谢谢.

iphone intersection objective-c nsmutablearray nsmutableset

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

计算圆和三角形的交点区域?

如何计算三角形(指定为三(X,Y)对)和圆(X,Y,R)之间的交叉区域?我做了一些搜索无济于事.这是为了工作,而不是学校.:)

它在C#中看起来像这样:

struct { PointF vert[3]; } Triangle;
struct { PointF center; float radius; } Circle;

// returns the area of intersection, e.g.:
// if the circle contains the triangle, return area of triangle
// if the triangle contains the circle, return area of circle
// if partial intersection, figure that out
// if no intersection, return 0
double AreaOfIntersection(Triangle t, Circle c)
{
 ...
}
Run Code Online (Sandbox Code Playgroud)

algorithm geometry intersection area computational-geometry

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

寻找具有高交集的集合的最快算法

我有大量的用户ID(整数),可能有数百万.这些用户都属于各种组(整数组),因此有大约1000万组.

为了简化我的示例并了解它的本质,我们假设所有组都包含20个用户ID.

我想找到交叉点为15或更大的所有整数集对.

我应该比较每一对吗?(如果我保留一个映射userID以设置成员资格的数据结构,则不需要这样做.)最快的方法是什么?也就是说,我的底层数据结构应该用于表示整数集?排序集,未分类---可以以某种方式散列帮助吗?我应该使用什么算法来计算集合交集)?我更喜欢与C/C++(特别是STL)相关的答案,但也欢迎任何更一般的算法见解.

更新 另外,请注意我将在共享内存环境中并行运行此功能,因此首选干净扩展到并行解决方案的提示.

另外,请注意绝大多数集合对的交集大小为0 ---这意味着使用将用户ID映射到集合的数据结构可能是有利的,以避免计算每对集合的交集.

algorithm intersection set data-structures

18
推荐指数
1
解决办法
3310
查看次数

计算线段之间的交叉点

关于stackowerflow的线段之间的交叉点有很多问题,这里还有一个问题!对不起,我需要帮助才能了解如何计算交叉点.我在这里阅读了几个问题并查看了其他网站上的几个例子,但我仍然感到困惑,并没有得到它!我不喜欢在没有工作原理的情况下复制和粘贴代码.

到目前为止,我知道我将比较每个线段的点,如Ax,Ay,Bx,By,Cx,Cy,Dx,Dy.有人可以向我解释一下我要计算的是什么,如果有一个交叉点,计算的结果是什么?

这是我看到的示例代码之一.我想我不需要交叉点,只知道线是否相交.

   public static Point lineIntersect(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) {
  double denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);
  if (denom == 0.0) { // Lines are parallel.
     return null;
  }
  double ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3))/denom;
  double ub = ((x2 - x1) * (y1 - …
Run Code Online (Sandbox Code Playgroud)

java math android intersection

18
推荐指数
2
解决办法
4万
查看次数

MySQL - 是否有可能获得两个查询结果的"差异"?

我需要合并两个查询结果,如同在union中,但我想只保留两个结果之间的差异.这可能吗?

我基本上选择查询1中的所有资源,以及查询2中的NOT-ALLOWED资源,我显然需要在上一个结果中使用ALLOWED资源.

在pseodo代码中:

Query1 - Query2
Run Code Online (Sandbox Code Playgroud)

Queryresult 1:

+-------+
|  id   |
+-------+
|   1   |
+-------+
|   2   |
+-------+
|   3   |
+-------+
|   4   |
+-------+
|   5   |
+-------+
|   6   |
+-------+
Run Code Online (Sandbox Code Playgroud)

Queryresult 2:

+-------+
|  id   |
+-------+
|   2   |
+-------+
|   5   |
+-------+
Run Code Online (Sandbox Code Playgroud)

需要:

+-------+
|  id   |
+-------+
|   1   |
+-------+
|   3   |
+-------+
|   4   |
+-------+
|   6   |
+-------+
Run Code Online (Sandbox Code Playgroud)

mysql sql intersection

17
推荐指数
1
解决办法
3万
查看次数

与AABB矩形线交叉?

优选地,不使用任何类型的循环,因为这将在游戏中使用.

我希望将一条线与一个任意大小的矩形相交.但我也希望返回交叉点[s].

这是可能的,我做了一些谷歌搜索,但仍然没有解决.

该线使用(x1,y1,x2,y2)定义.矩形也有这两点.

c# intersection collision-detection line

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

设置C++的差异

如果我知道一个集合是另一个集合的子集,并且我想找到差异,那么最有效的方法是什么?

恩.PSEUDO CODE

> set<int> set1 = {1 2 3 4 5 6 7 8 9 10}
> set<int> set2 = {5 6 7}
Run Code Online (Sandbox Code Playgroud)

我想减去set2来自set1:

这里的答案是

{1 2 3 4 8 9 10}
Run Code Online (Sandbox Code Playgroud)

c++ intersection set

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

相交两个数组

如何快速找到C#中2个数组之间的交叉?

arrays intersection c#-4.0

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

如何找到曲线和圆的交点?

我有一条曲线,来自经验数据,我可以得到一个合理的模型.我需要识别一个点(x,y),其中曲线与已知中心和半径的圆相交.以下代码说明了这个问题.

x <- c(0.05, 0.20, 0.35, 0.50, 0.65, 0.80, 0.95, 
   1.10, 1.25, 1.40, 1.55, 1.70, 1.85, 2.00, 
   2.15, 2.30, 2.45, 2.60, 2.75, 2.90, 3.05)

y <- c(1.52, 1.44, 1.38, 1.31, 1.23, 1.15, 1.06,
   0.96, 0.86, 0.76, 0.68, 0.61, 0.54, 0.47, 
   0.41, 0.36, 0.32, 0.29, 0.27, 0.26, 0.26)

fit <- loess(y ~ x, control = loess.control(surface = "direct"))
newx <- data.frame(x = seq(0, 3, 0.01))
fitline <- predict(fit, newdata = newx)
est <- data.frame(newx, fitline)

plot(x, y, type = "o",lwd = …
Run Code Online (Sandbox Code Playgroud)

plot intersection r

15
推荐指数
2
解决办法
624
查看次数