Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 基本矩形分割_Algorithm_Language Agnostic - Fatal编程技术网

Algorithm 基本矩形分割

Algorithm 基本矩形分割,algorithm,language-agnostic,Algorithm,Language Agnostic,我被一些琐碎的问题困住了,我想我需要帮助 我有两个矩形,保证它们从4个基点(图片的上半部分)有一个公共点。还保证它们是轴对齐的 我知道这个公共点(也可以很容易地推断),这些矩形的尺寸和坐标 现在,我需要检索名为1和2的矩形的坐标,我正在寻找一种简单的方法来实现这一点(图片的下半部分) 我当前的实现依赖于许多if语句,我怀疑我太笨了,找不到更好的方法 多谢各位 更新:我的当前实现。 这是重构的,但是方法getCommonPoint和getnextrick…和getantivative有许多if

我被一些琐碎的问题困住了,我想我需要帮助

我有两个矩形,保证它们从4个基点(图片的上半部分)有一个公共点。还保证它们是轴对齐的

我知道这个公共点(也可以很容易地推断),这些矩形的尺寸和坐标


现在,我需要检索名为
1
2
的矩形的坐标,我正在寻找一种简单的方法来实现这一点(图片的下半部分)

我当前的实现依赖于许多
if
语句,我怀疑我太笨了,找不到更好的方法

多谢各位

更新:我的当前实现。
这是重构的,但是方法
getCommonPoint
getnextrick…
getantivative
有许多
if
语句,我认为这是否可以做得更好。

据我所知,似乎需要一个if(或switch)语句来确定矩形的方向,从这里可以简单地进行加法和减法:

如果您知道内部蓝色矩形的坐标(以及作为一个整体的矩形的尺寸),那么找到其他矩形应该没有问题。R1和R2点中的一个始终相同:等于相邻的蓝色矩形点。其他的只是一个小数学


似乎无法摆脱最初的if/switch语句。如果矩形只能是向上或向下,那么你可以使偏移量为负或正,但也可以是左或右。因此,你可能会被卡住。您可以为垂直或水平状态创建一个-/+偏移量,但是您必须检查每个计算

假设您有
RA
RB
作为输入,并且您使用的任何语言都有一个
矩形
类,这里有一种方法可以使用4
if
s、
Math.Min
Math.Max
Math.Abs

Rectangle r1, r2; // Note - Rectangle constructor: new Rectangle(X, Y, Width, Height)
if (RA.X = RB.X) {  
    r1 = new Rectangle(Math.Min(RA.Right, RB.Right), Math.Min(RA.Y, RB.Y), Math.Abs(RA.Width - RB.Width), Math.Max(RA.Height, RB.Height));  
    if (RA.Y = RB.Y) {
        // Intersects Top Left
        r2 = new Rectangle(RA.X, Math.Min(RA.Bottom, RB.Bottom), Math.Min(RA.Width, RB.Width), Math.Abs(RA.Height - RB.Height));  
    } else {  
        // Intersects Bottom Left
        r2 = new Rectangle(RA.X, Math.Max(RA.Bottom, RB.Bottom), Math.Min(RA.Width, RB.Width), Math.Abs(RA.Height - RB.Height));
    }  
} else {  
    r1 = new Rectangle(Math.Min(RA.X, RB.X), Math.Min(RA.Y, RB.Y), Math.Abs(RA.Width - RB.Width), Math.Max(RA.Height, RB.Height));
    if (RA.Y = RB.Y) {  
        // Intersects Top Right
        r2 = new Rectangle(Math.Max(RA.X, RB.X), Math.Min(RA.Bottom, RB.Bottom), Math.Min(RA.Width, RB.Width), Math.Abs(RA.Height - RB.Height));
    } else {  
        // Intersects Bottom Right
        r2 = new Rectangle(Math.Max(RA.X, RB.X), Math.Min(RA.X, RA.Y), Math.Min(RA.Width, RB.Width), Math.Abs(RA.Height - RB.Height));
    }  
}  

此代码是用记事本编写的,因此可能有一两个输入错误,但逻辑是正确的。

矩形1的顶部和底部值与大矩形相同。矩形2的左右值与小矩形相同。我们只需要获得矩形1的左右值,以及矩形2的顶部和底部值。因此,我们只有两个简单的if语句:

if (bigRectangle.Left == smallRectangle.Left) 
    left = smallRectangle.Right
    right = bigRectangle.Right
else
    left = bigRectangle.Left
    right = smallRectangle.Left
rectangle1 = new Rectangle(left, bigRectangle.Top, right - left, bigRectangle.Height)

if (bigRectangle.Top == smallRectangle.Top)
    top = smallRectangle.Bottom
    bottom = bigRectangle.Bottom
else
    top = bigRectangle.Top
    bottom = smallRectangle.Top
rectangle2 = new Rectangle(smallRectangle.Left, top, smallRectangle.Width, bottom - top)

<>上述,矩形构造函数以左、上、宽、高、

呃为输入,使用哪种语言,你肯定不能使用C++、java和C++?还有,你尝试过什么?投票结束——问题太广泛,编程语言标签太多。“谁知道他说的是什么语言,或者语言是否重要呢?”克里斯托弗·克鲁恩斯我写了单独的if语句来确定我的情况是否符合4种可能的情况,然后使用单独的代码部分来确定矩形的坐标。然而,我怀疑,这可以很聪明地完成,甚至不需要确定4个可能的状态中的1个。对这个问题投反对票或投票赞成票是愚蠢的。你能发布你现在拥有的代码吗?
if (bigRectangle.Left == smallRectangle.Left) 
    left = smallRectangle.Right
    right = bigRectangle.Right
else
    left = bigRectangle.Left
    right = smallRectangle.Left
rectangle1 = new Rectangle(left, bigRectangle.Top, right - left, bigRectangle.Height)

if (bigRectangle.Top == smallRectangle.Top)
    top = smallRectangle.Bottom
    bottom = bigRectangle.Bottom
else
    top = bigRectangle.Top
    bottom = smallRectangle.Top
rectangle2 = new Rectangle(smallRectangle.Left, top, smallRectangle.Width, bottom - top)