从三个坐标中找出所有可能的坐标,构成一个非零面积的平行四边形。
假设 A、B 和 C 是三个给定点。我们只能得到以下三种可能的情况:
(1)AB 和 AC 为边,BC 为对角线
(2)AB 和 BC 为边,AC 为对角线
(3)BC 和 AC 为边,AB 为对角线
因此,我们可以说,如果给定三个坐标,那么只有三个坐标才有可能生成平行四边形。
为了证明这三个点都不相同,我们假设它是错误的。不失一般性,假设在AD和BC的情况下得到的点相等。
考虑这些点相等的两个方程组:
B x + C x - A x = A x + C x - B x
B y + C y - A y = A y + C y - B y
可以简化为-
A x = B x
A y = B y
如图:
我们得到了矛盾,因为点 A、B、C 都是不同的。
例子:
输入:A = (0 0)
B = (1 0)
C = (0 1)
输出:1 -1
-1 1
1 1
输入:A = (-1 -1)
B = (0 1)
C = (1 1)
输出:-2 -1
0 -1
2 3
由于对边相等,AD = BC 且 AB = CD,我们可以计算出缺失点 (D) 的坐标:
AD = BC
(D x - A x,D y - A y)=(C x - B x,C y - B y)
D x = A x + C x - B x D y = A y + C y - B y
如图:
对角线为AD和BC、CD和AB的情况处理方式相同。
以下是上述方法的实现:
// Java program to all possible
// points of a parallelogram
public class ParallelogramPoints{
// Driver code
public static void main(String[] s)
{
int ax = 5, ay = 0; //coordinates of A
int bx = 1, by = 1; //coordinates of B
int cx = 2, cy = 5; //coordinates of C
System.out.println(ax + bx - cx + ", "
+ (ay + by - cy));
System.out.println(ax + cx - bx + ", "
+ (ay + cy - by));
System.out.println(cx + bx - ax + ", "
+ (cy + by - ax));
}
}
// This code is contributed by Prerna Saini
输出:
4,-4
6,4
-2,1
时间复杂度: O(1)
辅助空间: O(1)
如果有人有在空间和时间方面更高效的更好解决方案,请提出建议。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。