Tag: 交集

在3d中查找2个任意立方体的交集

所以,我想找出一个函数,它允许你确定两个任意旋转和大小的立方体是否相交。 如果立方体的旋转不是任意的(但锁定到特定轴),则交叉点很简单; 通过检查它们的边界来检查它们是否在所有三个维度中交叉,以确定它们是否在所有三个维度中相交或相互在一起。 如果它们交叉或仅在两个内,它们不相交。 此方法可用于确定任意立方体是否是交集的候选对象,使用它们的最高/最低x,y和z来创建外边界。 这是第一步。 理论上,根据这些信息,我们可以分辨出它们彼此之间的“侧面”,这意味着我们可以从交叉点消除一些四边形(边)。 但是,我不能假设我们有这些信息,因为立方体的旋转可能使得难以简单地确定。 我的想法是取每对四边形,找到它们的平面的交点,然后确定该线是否与每对边的至少一个边相交。 如果任何一对边具有与其任何边相交的交线,则四边形相交。 如果没有相交,则两个立方体不相交。 然后,我们可以确定第二个立方体上的交叉点的深度,其中平面相交线与其边缘相交。 然而,这只是推测性的。 有没有更好,更有效的方法来确定这两个立方体的交集? 我可以想到许多不同的方法来做到这一点,我也可以说它们在所需的计算量方面可能非常不同。 我目前正在使用Java,但C / C ++解决方案也很酷(我可以移植它们); 即使是伪问题,因为它可能是个大问题。

计算O((n + s)log n)中的圆交点

我试图弄清楚如何设计一个能够用O((n + s)log n)复杂度完成这项任务的算法。 是交叉点的数量。 我试过在网上搜索,却找不到东西。 无论如何,我意识到拥有一个好的数据结构是关键。 我在java:TreeMap中使用Red Black Tree实现。 我还使用着名的(?)扫描线算法来帮助我处理我的问题。 让我先解释一下我的设置。 我有一个调度程序。 这是一个PriorityQueue,我的圈子根据最左边的坐标排序(升序)。 scheduler.next()基本上轮询PriorityQueue,返回下一个最左边的圆圈。 public Circle next() { return this.pq.poll(); } 我这里也有一个包含4n个事件点的数组。 授予每个圆圈有2个事件点:大多数左x和最右x。 调度程序有一个方法sweepline()来获取下一个事件点。 public Double sweepline() { return this.schedule[pointer++]; } 我也有状态。 扫描线状态更加精确。 根据该理论,状态包含有资格相互比较的圆圈。 在整个故事中拥有扫描线的关键在于你能够排除很多候选人,因为他们根本不在当前圈子的半径范围内。 我使用TreeMap实现了Status。 Double是circle.getMostLeftCoord(). 此TreeMap保证O(log n)用于插入/删除/查找。 算法本身的实现方式如下: Double sweepLine = scheduler.sweepline(); Circle c = null; while (notDone){ while((!scheduler.isEmpty()) && (c = […]

libgdx中的Circle-Rectangle碰撞侧检测

我花了几个小时寻找解决方案:我正在用libgdx开发一个小型自上而下的游戏(也许这对我使用的引擎很重要)。 现在我必须在我的角色(圆圈)和墙壁(矩形)之间实现碰撞检测。 如果可以滑动,我希望角色在碰撞时沿着墙壁滑动。 让我解释: 如果我向上移动45度,我可以与墙的左下角碰撞。 如果我与左侧发生碰撞,我想停止x移动并向上移动。 如果我离开墙壁,那么我想继续前进。 与下侧相同(停止y运动) 如果我与角落碰撞我想停止运动(滑动不可能)。 我实际上做的是检查矩形的左边是否与我的圆相交。 然后我检查左边的墙和我的圆圈以及墙的底线和我的圆圈之间的交叉点。 根据哪个交叉点出现,我设置了我的圆圈的x / y,并将x / y速度设置为0.问题是,大多数情况下不是碰撞而是发生 重叠 。 所以底部检查返回true,即使实际上圆圈只会与右边碰撞。 在这种情况下,两个交叉点测试都将返回true,我将重置两个速度,就像在Corner碰撞中一样。 我怎么解决这个问题? 是否有更好的方法来检测碰撞和碰撞的侧面或角落? 我不需要在矩形的一侧确切的碰撞点。 编辑:我不得不说,rects不是平行于x轴旋转。

找到两个数组的交集

我的目标是找出数组a和b的交集值并将它们存储到一个新的数组c中,因此打印输出将为:3,10,4,8。 如何将给定值分配给第3个数组c? public static void main(String[] args) { int a[] = {3, 10, 4, 2, 8}; int[] b = {10, 4, 12, 3, 23, 1, 8}; int[] c; int i=0; for(int f=0;f<a.length;f++){ for(int k=0;k<b.length;k++){ if(a[f]==b[k]){ //here should be a line that stores equal values of 2 arrays(a,b) into array c } } } for (int […]

Java 8 Lambda – 两个列表的交集

我试图根据某些条件找到两个列表的intersection并执行一些步骤。 找不到办法(在学习阶段):) Double totalAmount = 0.00d; Double discount = 0.00d; List orderLineEntryList = orderEntry.getOrderReleases().stream() .flatMap(orderReleaseEntry -> orderReleaseEntry.getOrderLines().stream()) .filter(orderLineEntry -> orderLineEntry.getStatus().equals(“PP”) || orderLineEntry.getStatus().equals(“PD”)) .collect(Collectors.toList()); for (OrderLineEntry orderLineEntry : orderLineEntryList) { for (SplitLineEntry splitLineEntry : splitReleaseEntry.getLineEntries()) { if (splitLineEntry.getOrderLineId().equals(orderLineEntry.getId()) && splitLineEntry.getStatusCode() != “PX”) { totalAmount += orderLineEntry.getFinalAmount(); couponDiscount += orderLineEntry.getCouponDiscount() == null ? 0.00d : orderLineEntry.getCouponDiscount(); } […]

Java方法只使用左下点,宽度和高度找到两个矩形交集的矩形?

我找到了解决方案,但希望确保我的逻辑是最有效的。 我觉得有更好的方法。 我有左下角的(x,y)坐标,2个矩形的高度和宽度,我需要返回第三个矩形,它们是它们的交点。 我不想发布代码,因为我觉得它是作弊。 我弄清楚哪个是最左边和最高的图表。 我检查一个是否与另一个完全重叠,然后反向查看另一个是否与X轴上的第一个完全重叠。 我检查X轴上的部分交叉点。 我基本上重复Y轴的步骤2和3。 我做了一些数学计算,并根据这些条件得到矩形的点。 我可能会过度思考并编写效率低下的代码。 我已经参加了一个工作计划,但我想找到最适合自己知识的方法。 如果有人可以同意或指出我正确的方向,那将是伟大的!

Java中两个字符串的交集

需要一个Java函数来查找两个字符串的交集。 即字符串共有的字符。 例: String s1 = new String(“Sychelless”); String s2 = new String(“Sydney”);

Java-多边形和直线的交点

有没有任何函数可以给我一个Polygon和Line2D的交点? 我有一个Polygon和一个我知道相交的线段我希望交点的实际值不是布尔答案。