C++ 如何在不知道宽度或高度的情况下对矩形的角进行最佳排序?
我有一个矩形的四个坐标。我想找出哪些是左上角、右上角、左下角和右下角的点。 我自己编写的方法(不必要地)很长,实际上没有起作用(可能是因为我在某个地方犯了错误)。不管是哪种方式,我肯定有一种更简单的方法,但我找不到使用谷歌的方法。因此,任何帮助都将不胜感激 我的方法是用max y(最上面)、min y(最下面)、max x(最右边)、min x(最左边)查找角点。然后,如果最左边的.y>最右边的.y,那么左上角点是最左边的,右上角点是最上面的,等等。 这个方法正确吗?还有更简单的方法吗 我的代码,很抱歉,很混乱。。。squareX[0]是第一个x坐标squareY[0]是第一个y坐标等 编辑:结果表明我的方法很好,它的just max()并不像我想象的那样(将输入的所有数字中的最大值都返回出来)C++ 如何在不知道宽度或高度的情况下对矩形的角进行最佳排序?,c++,opencv,math,C++,Opencv,Math,我有一个矩形的四个坐标。我想找出哪些是左上角、右上角、左下角和右下角的点。 我自己编写的方法(不必要地)很长,实际上没有起作用(可能是因为我在某个地方犯了错误)。不管是哪种方式,我肯定有一种更简单的方法,但我找不到使用谷歌的方法。因此,任何帮助都将不胜感激 我的方法是用max y(最上面)、min y(最下面)、max x(最右边)、min x(最左边)查找角点。然后,如果最左边的.y>最右边的.y,那么左上角点是最左边的,右上角点是最上面的,等等。 这个方法正确吗?还有更简单的方法吗 我的代码
谢谢按点的剩余距离排序。前两点是矩形的左侧。按高度对这两点进行排序。最高的是左上角点,另一个是左下角点。对右边的两个进行同样的操作。这是一种尝试,使用尽可能少的比较:
if X0 == X1:
# P0 and P1 are on a vertical
if X0 < X2:
# P0 and P1 are on the left
else:
# P2 and P3 are on the left
swap P0-P2
swap P1-P3
else:
# P0 and P1 are on a diagonal
if X0 < X1:
# P0 is on the left
if X0 < X2:
# P0 and P3 are on the left
swap P1-P3
else:
# P0 and P2 are on the left
swap P1-P2
else:
# P1 is on the left
if X1 < X2:
# P1 and P3 are on the left
swap P0-P3
else:
# P1 and P2 are on the left
swap P0-P2
在Y上再进行两次比较(向下增加),矩形为0231,顺时针方向
在少于5个比较中,你不能这样做,因为你需要覆盖24个排列(2 ^ 4<p>),你可以使用标准的C++库,<代码> MyNyEngs< /C>和<代码> Max元素> /Cord>,使用自定义比较器。
我有一个简单的例子(抱歉,这不是纯opencv,但移植很简单)。我最近遇到了类似的问题,让我分享一下我的方案:
矩形是否平行于轴es?您的方式似乎是最简单的,因此不清楚您要简化什么。因此,请添加您的代码。它可以是任意方向,但可能不平行于轴。首先,沿x方向的起点排序矩形,然后沿y方向排序。您将完成排序组。如果矩形可以是正方形,并且可以有任何方向,如果正方形正好位于尖端上,您如何定义左上角?使用字典顺序(在X上比较,如果是平局,则在Y上比较)将一次性执行这两个操作。
if X0 == X1:
# P0 and P1 are on a vertical
if X0 < X2:
# P0 and P1 are on the left
else:
# P2 and P3 are on the left
swap P0-P2
swap P1-P3
else:
# P0 and P1 are on a diagonal
if X0 < X1:
# P0 is on the left
if X0 < X2:
# P0 and P3 are on the left
swap P1-P3
else:
# P0 and P2 are on the left
swap P1-P2
else:
# P1 is on the left
if X1 < X2:
# P1 and P3 are on the left
swap P0-P3
else:
# P1 and P2 are on the left
swap P0-P2
if Y0 > Y1:
# P1 is upper
swap P0-P1
if Y2 > Y3:
# P3 is upper
swap P2-P3