Java 基于4个角获取正方形的中心

Java 基于4个角获取正方形的中心,java,math,trigonometry,Java,Math,Trigonometry,我的代码有问题,它应该给我一个正方形的中心。正方形保存为双[]阵列中的角点 static double[] getMid(double[][] points){ double[] mid = new double[2]; double a = Math.sqrt( (points[0][0] - points[1][0]) * (points[0][0] - points[1][0]) + (points[0][1] - poin

我的代码有问题,它应该给我一个正方形的中心。正方形保存为双[]阵列中的角点

static double[] getMid(double[][] points){
    double[] mid = new double[2];
    double a = Math.sqrt( (points[0][0] - points[1][0]) * (points[0][0] - points[1][0]) 
                        + (points[0][1] - points[1][1]) * (points[0][1] - points[1][1]) );
    a/=2;
    double c = a / Math.sin(Math.toRadians(45));

    mid[0] = Math.sin(Math.toRadians(45)) * c + points[1][0];
    mid[1] = Math.cos(Math.toRadians(45)) * c + points[1][1];

    StdDraw.point(mid[0], mid[1]);

    return mid;
}
我最初的想法是计算中心和角的距离,然后用距离和角度计算中心点。 当正方形处于正常位置时,这可以正常工作,但一旦旋转,中心就会偏离


点代表计算出的中心。

我认为代码对于它的功能来说太复杂了。如果你知道这个图形是一个正方形,你需要做的就是计算出任意两个对角点之间的中点

mid[0] = (points[0][0] + points[2][0]) / 2;
mid[1] = (points[0][1] + points[2][1]) / 2;

我同意@NPE,您可能应该使用这个简单的代码段,但对于您的代码本身,我认为您没有考虑到您有4点,而不是2点:

double a = Math.sqrt( (points[0][0] - points[1][0]) * (points[0][0] - points[1][0]) 
                    + (points[0][1] - points[1][1]) * (points[0][1] - points[1][1]) );
其他两点在哪里

编辑:

来评论一下你到底在做什么。 首先计算1号尺寸的长度:

双a=Math.sqrt((点[0][0]-点[1][0])*(点[0][0]-点[1][0]) +(点[0][1]-点[1][1])*(点[0][1]-点[1][1])

然后取该尺寸的一半(
a/=2;
),并将其用作三角形的大尺寸(斜边),计算出与角度尺寸相反的长度:

double c = a / Math.sin(Math.toRadians(45));
然后用这个长度分别计算你创建的这个小三角形的对边和近边大小,这个三角形的斜边是后面的长度

因此,我不想失去一些评论,为什么这无论如何都不起作用:

  • c
    应首先与
    sqrt(2)
    相乘,以表示正方形中对角线的正确长度
  • 应减去x坐标,而不是将其添加到
    点[1][0]
  • 这个概念只有45度的函数,否则它需要更复杂的计算

  • 因为它是正方形,所以你可以通过求角点x坐标的平均值,然后求角点y坐标的平均值来找到中心。这将为您提供正方形中心的x和y坐标。我相信这也适用于矩形。

    有时候事情越想越复杂。。。谢谢,这很好。我只计算了一面的长度。