两个rectangles的联合。编写一个程序来找到包含2个给定矩形的最小可能矩形
给定左下角(x,y)的坐标,2个矩形的长度(l)和宽度(w),编写程序以找到包围2个给定矩形的最小可能矩形。
输入和输出格式:
输入的第一行由4个整数组成,这些整数由对应于第一个矩形的x,y,l和w的空格分隔。
输入的第二行由4个整数组成,这些整数由对应于第二个矩形的x,y,l和w的空格分隔。
输出由4个整数组成,这些整数对应于Union矩形的x,y,l和w。
样本输入:
3 8 1515
2 6 10 10
样本输出:
2 6 16 17
我无法弄清楚逻辑……我不是要求整个程序,只是想要逻辑部分的帮助……
更新:这是我的程序,现在正在工作…谢谢大家的帮助:)
#include int main() { int x1, x2, y1, y2, l1, l2, w1, w2, xmax, xmin, ymax, ymin; scanf(“%d %d %d %d\n”,&x1,&y1,&l1,&w1); scanf(“%d %d %d %d\n”,&x2,&y2,&l2,&w2); xmin = x1 < x2 ? x1 : x2; ymin = y1 c ? b : c; int d = y1 + w1; int e = y2 + w2; ymax = d > e ? d : e; int l = xmax - xmin; int w = ymax - ymin; printf(“%d %d %d %d”,xmin,ymin,l,w); return 0; }
无法弄清楚我的程序中的问题.. 🙁
假设正长度和宽度:
-
找到最低
xmin
:x1
和x2
最小值。ymin
相同。 现在输出矩形角已知。 -
找到最高
xmax
:最大x1 + l1
和x2 + l1
。ymax
使用y
值和宽度相同。 -
确定输出矩形尺寸:
length
:xmax
和xmin
差值。width
和ymax, ymin
。
就这么简单。
给定左下角的位置,长度和宽度,您可以确定其他三个点。 对两个矩形都这样做。 例如,给定x1
, y1
, l1
, w1
, p1 = (x1,y1)
, p2 = (x1,y1+l1)
, p3 = (x1+w1,y1)
, p4 = (x1+w1,y1+l1)
。
现在看看你有的八个点,找到最小的X(minX)和最小的Y(minY),以及最大的X(maxX)和最大的Y(maxY)。 请注意,这些值中没有一个必然来自同一点。
您的结果现在是minX
, minY
, maxY - minY
和maxX - minX
。
脚步:
- 计算两个矩形的右上角
- 您必须对x的坐标和y的坐标进行排序。
-
包含2个给定矩形的最小矩形具有:
- 左下角:
(x1,y1)
- 右上角:
(x4,y4)
- 左下角:
-
计算大小。
看图:
1)找到Xmin = X1和X2的最小值。
2)找到Ymin = Y1和Y2的最小值。
3)求Xmax =(X1 + L1)和(X2 + L2)的最大值
4)求Ymax =(Y1 + W1)和(Y2 + w2)的最大值
5)查找长度= Xmax和Xmin之间的差异
6)找到宽度= Ymax和Ymin之间的差异
7)最终结果是(Xmin,Ymin,长度,宽度)