给定四个坐标检查它是否形成正方形

2023-11-29

所以我试图编写一个简单的方法,它接受四个坐标集并确定它们是否形成正方形。我的方法是从一个点开始,计算其他三个点与基点之间的距离。由此我们可以得到具有相同值的两条边和一条对角线。然后我使用毕达哥拉斯定理来查找边的平方是否等于对角线。如果是 isSquare 方法返回 true 否则 false。我想要的东西找出是否有一些我可能会错过的情况,或者方法是否有问题。感谢您的所有帮助。

public class CoordinatesSquare {

public static boolean isSquare(List<Point> listPoints) {
    if (listPoints != null && listPoints.size() == 4) {
        int distance1 = distance(listPoints.get(0), listPoints.get(1));
        int distance2 = distance(listPoints.get(0), listPoints.get(2));
        int distance3 = distance(listPoints.get(0), listPoints.get(3));

        if (distance1 == distance2) {
            // checking if the sides are equal to the diagonal
            if (distance3 == distance1 + distance2) {
                return true;
            }

        } else if (distance1 == distance3) {
            // checking if the sides are equal to the diagonal
            if (distance2 == distance1 + distance3) {
                return true;
            }

        }
    }
    return false;
}

private static int distance(Point point, Point point2) {
              //(x2-x1)^2+(y2-y1)^2
    return (int) (Math.pow(point2.x - point.x, 2) + (Math.pow(point2.y
            - point.y, 2)));
}

public static void main(String args[]) {
    List<Point> pointz = new ArrayList<Point>();
    pointz.add(new Point(2, 2));
    pointz.add(new Point(2, 4));
    pointz.add(new Point(4, 2));
    pointz.add(new Point(4, 4));
    System.out.println(CoordinatesSquare.isSquare(pointz));
}
}


//Point Class
 public class Point {
Integer x;
Integer y;
boolean isVisited;

public Point(Integer x, Integer y) {
    this.x = x;
    this.y = y;
}

@Override
public boolean equals(Object obj) {
    if(obj!=null && obj.getClass().equals(this.getClass())){
        return ((Point) obj).x.equals(this.x)&&((Point) obj).y.equals(this.y);
    }
    return false;

}
}

您知道,您可以更轻松地进行相同的检查。您只需检查两件事: “四点构成一个平行四边形”和“其中一个角是直角”。

第一个为真,当P3 = P1 + (P2-P1) + (P4-P1)

第二个当(P2-P1)*(P4-P1) = 0

Where A*B是点积(A.x * B.x + A.y * B.y)

这里唯一的问题是计算错误。你不能期望浮点数完全相等,所以而不是A=B你应该考虑使用类似的东西abs(A-B) < E where E对于您的情况来说足够小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

给定四个坐标检查它是否形成正方形 的相关文章

随机推荐

  • 给定三个点如何计算圆的中心点?

    我正在使用 Javascript 并且我知道 3 个点的位置 我想用它们来找出圆的中心点 我发现了这个逻辑 不是选择的答案 而是有 11 票赞成的答案 https math stackexchange com questions 21365
  • 如何在 Perl 中找到从某个包继承的所有包?

    我有许多不同的网站 我从这些网站下载数据并将其转换为其他格式 使用 Perl 以便在工作中使用 这些网站都是从一个 Perl 脚本运行的 如下所示 usr bin perl use strict use My Package1 use My
  • 使用 Woocommerce 挂钩显示匹配订单项元值中选定的 BACS 帐户

    基于 选择要在 WooCommerce 的感谢页面中显示的 BACS 帐户 回答我的问题之一的代码 我更改了 Woocommerce 核心文件 class wc gateway bacs php 以便选择感谢页面上显示的正确银行帐户 该帐户
  • 高负载下 Java Beanshell 解释器中的锁争用

    我们在应用程序中使用 Java BeanShell 解释器 v1 2 b7 来动态执行标准 Java 语法 示例代码 bsh Interpreter interpreter new bsh Interpreter interpreter s
  • 带有变量的 NSURL 中的空格不会加载

    大家好 我有一个 Objective C 困境 P 我对 Objective C 很陌生 我尝试寻找答案 但没有成功 所以 这是我的情况 我现在就把代码放在这里 否则就没多大意义了 我正在写下我需要的东西 这段代码现在不起作用 稍后我会解释
  • 如果应用程序是调试版本或发布版本,Firebase 会写入不同的文件

    我刚刚发现 Firebase 出现了一些非常奇怪的情况 我想知道是我做错了什么还是这个问题有解决方案 基本上 这是我开发应用程序时一直写的内容 这正是我所期望的 nscoachtools gmail com maxMatches 60 ma
  • 将 jQuery 与 Raphael 一起使用

    我和拉斐尔一起创建了一个图像映射 我希望当单击图像映射中的路径之一 下例中的路径 10 时 包含 Raphael 画布的 div 使用 jQuery 淡出 下面的代码不起作用 但我走在正确的轨道上吗
  • Smack 4.1.4 Stanza 中的自定义扩展元素

    我正在将我的 Android 应用程序从 asmack android 库移至 Smack 4 1 4 我在 Smack 的 asmack 版本中有一些 PacketExtension 它使用 PacketExtension 和 Packe
  • 如何在输入中添加按钮

    使用 HTML 和 CSS 如何直观地将按钮放置在输入元素内 如下所示 用户应该能够正常与输入交互 文本不应位于按钮后面 即使文本很长 焦点应该可以正常工作 该表单应该可以在屏幕阅读器中访问并正常工作 整个组件应该可以使用 CSS 设置样式
  • 在 AngularJs 中定义控制器的最佳方法

    我是 AngularJs 的新手 我很困惑哪一种是为其创建控制器的最佳方法ng app mainApp 在编程时 我曾使用过的其他编程语言建议将相关数据保存在一起 但在 AngularJs 中 当我们可以在主应用程序模块上定义控制器时 为控
  • 如何提高 Tesseract 中 OCR 文本的准确性?

    我使用 Google 的 Tesseract API 创建了一个用于识别文本的基本应用程序 并将其与我的相机应用程序集成 它工作正常 但唯一的问题是准确性 因为有时文本被识别为随机字符集 我猜准确度约为 50 此外 当它尝试扫描图像中超过四
  • Angular 2:无法读取未定义的属性“push”

    在我的 Angular 2 应用程序中 我有一个函数 notification Array
  • 如何使组合框项目列表动态化?

    我在工作表上使用 生成 按钮 当我单击该按钮时 会出现一个弹出窗口 表单 其中包含两个组合框 根据第一个组合框中的选择 填充第二个组合框选项列表 对于第一个组合框 当我对项目值进行硬编码时 它工作正常 表单代码如下 Private Sub
  • 在sql和pyodbc中参数化TOP值

    我尝试参数化从表中获取的顶行数 我尝试过 db cursor execute SELECT TOP VALUE FROM mytable WHERE param top value param 它表明 pyodbc ProgrammingE
  • 跨 REST 微服务的事务?

    假设我们有一个用户 钱包 REST 微服务和一个将事物粘合在一起的 API 网关 当 Bob 在我们的网站上注册时 我们的 API 网关需要通过 User 微服务创建用户 并通过 Wallet 微服务创建钱包 现在这里有一些可能出现问题的场
  • 使用 keras 在 gcloud ml-engine 上处理 TB 数据的最佳方法

    我想使用 gcloud 存储上约 2TB 的图像数据训练模型 我将图像数据保存为单独的 tfrecords 并尝试按照此示例使用张量流数据 api https medium com moritzkrger speeding up keras
  • 响应 SQL 'in' 语句的 R 语句是什么?

    a case df data frame id c 101 102 102 103 104 104 104 calmonth c 01 01 01 01 01 01 02 product c apple apple htc htc appl
  • 如何生成开发MDM/APNS证书?

    我们已经取得了iOS开发者企业帐户 并且我们已经收到了 pem格式的MDM证书 我们已经从门户网站下载了这个mdm证书https identity apple com pushcert 但我们不知道这是生产 MDM 证书还是开发 MDM 证
  • 使用视图寻呼机 android 覆盖 Flow 功能

    我必须在我的应用程序中实现类似于mobikwik 应用程序封面流程 and 我已经尝试过Android CoverFlow 小部件库以及其他一些人 但没有任何效果按预期进行 我如何使用 ViewPager 实现这种类型的视图 我已经创建了我
  • 给定四个坐标检查它是否形成正方形

    所以我试图编写一个简单的方法 它接受四个坐标集并确定它们是否形成正方形 我的方法是从一个点开始 计算其他三个点与基点之间的距离 由此我们可以得到具有相同值的两条边和一条对角线 然后我使用毕达哥拉斯定理来查找边的平方是否等于对角线 如果是 i