gpt4 book ai didi

algorithm - 基本矩形分割

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:53 24 4
gpt4 key购买 nike

我被一些琐碎的问题困住了,好吧,我想我需要这里的帮助。

enter image description here

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

我知道这些矩形的这个共同点(也很容易推导出来)、尺寸和坐标。


现在,我需要检索名为12 的矩形的坐标,我正在寻找一种简单的方法那(图片的下部)

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

谢谢。

更新:我当前的实现。

Point commonPoint = getCommonPoint(bigRectangle, smallRectangle);

rectangle2 = new Rectangle(smallRectangle.getAdjacentVerticalPoint(commonPoint),
bigRectangle.getOppositePoint(commonPoint));

rectangle1 = new Rectangle(smallRectangle.getAdjacentHorizontalPoint(commonPoint)
bigRectangle.getOppositePoint(commonPoint));

// Now simply adjust one of these rectangles to remove the overlap,
// it's trivial - we take the 'opposite' points for 'small' and 'big'
// rectangles and then use their absolute coordinate difference as
// a fix for either width of 'rectangle2' or height of 'rectangle1'
// (in this situation it's going to be width).

adjustRectangle(rectangle2);

这是重构,但方法 getCommonPointgetAdjacent...getOpposite 仍然有许多 if 语句我想是否可以做得更好。

最佳答案

Rectangle 1 的 top 和 bottom 值与大矩形相同。矩形2的左右值与小矩形相同。我们只需要获取矩形 1 的左值和右值,以及矩形 2 的顶值和底值。所以我们只有 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)

在上面,Rectangle 构造函数接受输入:left、top、width、height。

关于algorithm - 基本矩形分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7762000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com