我正在尝试编写一个C++程序,它从用户那里获取以下输入来构造矩形(2到5之间):高度,宽度,x-pos,y-pos.所有这些矩形将平行于x轴和y轴存在,即它们的所有边都将具有0或无穷大的斜率.
我试图实现这个问题中提到的但我没有太多运气.
我目前的实现如下:
// Gets all the vertices for Rectangle 1 and stores them in an array -> arrRect1
// point 1 x: arrRect1[0], point 1 y: arrRect1[1] and so on...
// Gets all the vertices for Rectangle 2 and stores them in an array -> arrRect2
// rotated edge of point a, rect 1
int rot_x, rot_y;
rot_x = -arrRect1[3];
rot_y = arrRect1[2];
// point on rotated edge
int pnt_x, pnt_y;
pnt_x = arrRect1[2];
pnt_y = arrRect1[3]; …Run Code Online (Sandbox Code Playgroud) 我有两个矩形,每个矩形有4个值:
左侧位置X,顶部位置Y,宽度W和高度H:
X1, Y1, H1, W1
X2, Y2, H2, W2
Run Code Online (Sandbox Code Playgroud)
矩形不会旋转,如下所示:
+--------------------> X axis
|
| (X,Y) (X+W, Y)
| +--------------+
| | |
| | |
| | |
| +--------------+
v (X, Y+H) (X+W,Y+H)
Y axis
Run Code Online (Sandbox Code Playgroud)
确定两个矩形的交点是否为空的最佳解决方案是什么?
我正在寻找一种算法来解决这个问题:
给定笛卡尔坐标上的N个矩形,找出这些矩形的交集是否为空.每个矩形可以位于任何方向(不必使其边缘平行于Ox和Oy)
你有什么建议可以解决这个问题吗?:)我可以考虑测试每个矩形对的交集.但是,它是O(N*N)并且非常慢:(
我不知道从哪里开始.显然CGRectIntersectsRect在这种情况下不起作用,你会明白为什么.
我有一个UIView的子类,里面有一个UIImageView,放在UIView的确切中心:

然后我旋转自定义UIView以维持内部UIImageView的框架,同时仍然能够执行CGAffineRotation.结果框架看起来像这样:

我需要阻止用户使这些UIImageViews相交,但我不知道如何检查两个UIImageViews之间的交集,因为它们的框架不仅不适用于父UIView,而且它们在不影响其框架的情况下旋转.
我尝试的唯一结果是不成功的.
有任何想法吗?
我有两个 ImageView
我需要的:
第二个拖到ImageView另一个ImageView,当它们相交时,我需要调用一个方法.
编辑1:
相交b/w两个imageView DONE但是在拖拽上它没有发生.
编辑2:
我怎样才能实现这个目标Drag and drop?
我想检测两个旋转的div是否发生碰撞.如果他们没有轮换,我知道怎么做,但我不知道如何实际做到这一点.
我已经尝试了一些碰撞插件,例如jQuery Collision(http://sourceforge.net/projects/jquerycollision/),但是当div旋转时它们没有工作.
我使用CSS的transform属性进行了div的旋转.
OBB具有位置(x,y),速度(x,y)和方向(矩阵).给定定期更新,OBB必须相互冲突,返回被认为成功的移动部分.
我查看了GPWiki上的Polygon测试 - http://gpwiki.org/index.php/Polygon_Collision - 但它没有考虑移动对象或完全在OBB中的对象.
"实时碰撞检测"一书涵盖了第4章:边界体积中的3D OBB,但3维测试方法明显比2D更复杂.
这就是我目前正在做的事情:
创建垂直于2个矩形的4个边的4轴.由于它们是矩形,因此我不需要为每条边生成轴(法线).
然后我循环我的4轴.
因此,对于每个轴:我将矩形的每个角投影到轴上.有两个包含这些投影的列表(数组).每个矩形一个.然后我得到每个投影和轴的点积.这将返回一个标量值,可用于确定最小值和最大值.
现在,2个列表包含标量而不是向量.我对列表进行排序,以便我可以轻松选择最小值和最大值.如果框B的最小值=框A的最大值或框B的最大值<=框A的最小值,则该轴上没有碰撞且对象之间没有碰撞.
此时函数完成并且循环中断.
如果所有轴都没有满足这些条件,那么我们就会发生碰撞
我希望这是正确的做法.
python代码本身可以在这里找到http://pastebin.com/vNFP3mAb
另外:http: //www.gamedev.net/page/reference/index.html/_/reference/programming/game-programming/collision-detection/2d-rotated-rectangle-collision-r2604
我遇到的问题是上面的代码不起作用.即使没有碰撞,它也始终检测到碰撞.我输入的内容正是代码所做的.如果我遗漏任何步骤或者只是不了解SAT如何运作,请告诉我.
我遇到了完成我的申请所需的数学问题,所以我正在寻求帮助.
给出2个(或更多,但基本上为2个)矩形,每个矩形有2个已知点:左上角(x1,y1)和右下角(x2,y2)(我可以找到这些信息的长度,如果是需要解决问题).
TL(x1, y1)
+-----------------+
| |
| | TL(x3, y3)
| | +---------------------------+
+-----------------+ | |
BR(x2, y2) +---------------------------+
BR(x4, y4)
Run Code Online (Sandbox Code Playgroud)
无论如何确定它们是否有交叉,在区域中,我的意思是,如果这个矩形的任何部分放在另一个的任何部分上?
我搜索并找到了一些帮助,但它没有解决问题:
有两种情况,两个矩形不会相交:
一个矩形的左边缘位于另一个矩形的右边缘的右侧,意味着第一个矩形的左边缘完全位于第二个矩形的右侧,没有交叉点.
一个矩形的右边缘位于另一个矩形的左边缘的左侧,意味着第一个矩形的右边缘完全位于第二个矩形的左侧,没有交叉点.
一个矩形的顶部边缘位于另一个矩形的底部边缘下方,意味着第一个矩形完全位于第二个矩形的下方,没有交叉点.
一个矩形的下边缘位于另一个矩形的上边缘上方,意味着第一个矩形完全位于第二个上方,没有交叉点.
所以我试图扭转条件,即如果没有发生上述4,则矩形可能会相交.但我仍然可以找到2个矩形不满足任何条件但仍然不相交的条件(如上图).
任何帮助都非常感谢,请告诉我这样做的方法或算法或代码(仅限JS和PHP).
非常感谢!
[X]
什么是检查2个矩形之间的碰撞的快速方法,然后您有矩形坐标,如:
红色矩形:A1(x1,y1),B1(x2,y2).
蓝色矩形:A2(x3,y3),B2(x4,y4).

algorithm ×4
math ×3
geometry ×2
intersection ×2
javascript ×2
android ×1
c++ ×1
css ×1
frame ×1
html ×1
imageview ×1
ios ×1
jquery ×1
objective-c ×1
overlap ×1
php ×1
physics ×1
pseudocode ×1
pygame ×1
python ×1
rectangles ×1
rotation ×1
shapes ×1