当前位置: 首页 > 编程笔记 >

检查给定的四个点是否形成正方形

袁高明
2023-03-14
本文向大家介绍检查给定的四个点是否形成正方形,包括了检查给定的四个点是否形成正方形的使用技巧和注意事项,需要的朋友参考一下

在二维平面中,给出了四个点。该算法将检查四个点是否形成正方形。

检查正方形我们必须匹配这些条件-

  • 给定点形成的所有四个边都相同。

  • 所有两个连接侧都是直角的。

输入输出

Input:
Four points {(20, 10), (10, 20), (20, 20), (10, 10)}
Output:
点正在形成一个正方形。

算法

isFormingSquare(p1, p2, p3, p4)

在此过程中,我们将使用方法squareDist(p1,p2),它将返回两个给定点的平方距离。

输入: 四点。

输出:给定点形成正方形时为真。

Begin
   dist12 := squareDist(p1, p2)
   dist13 := squareDist(p1, p3)
   dist14 := squareDist(p1, p4)

   if dist12 = dist13 and 2*dist12 = dist14, then
      dist := squareDist(p2, p4)
      return true when dist = squareDist(p3, p4) and dist = dist12
   if dist13 = dist14 and 2*dist13 = dist12, then
      dist := squareDist(p2, p3)
      return true when dist = squareDist(p2, p4) and dist = dist13
   if dist12 = dist14 and 2*dist12 = dist13, then
      dist := squareDist(p2, p3)
      return true when dist = squareDist(p3, p4) and dist = dist12
   return false
End

示例

#include<iostream>
using namespace std;

struct Point {
   int x, y;
};

int squareDist(Point p, Point q) {
   return (p.x - q.x)*(p.x - q.x) + (p.y - q.y)*(p.y - q.y);
}

bool isSquare(Point p1, Point p2, Point p3, Point p4) {    //check four points are forming square or not
   int dist12 = squareDist(p1, p2);     // distance from p1 to p2
   int dist13 = squareDist(p1, p3);     // distance from p1 to p3
   int dist14 = squareDist(p1, p4);     // distance from p1 to p4

   //当p1-p2和p1-p3的长度相同时,(p1-p4)的平方= 2 *(p1-p2)
   if (dist12 == dist13 && 2*dist12 == dist14) {
      int dist = squareDist(p2, p4);
      return (dist == squareDist(p3, p4) && dist == dist12);
   }

   //所有其他组合的条件相同
   if (dist13 == dist14 && 2*dist13 == dist12) {
      int dist = squareDist(p2, p3);
      return (dist == squareDist(p2, p4) && dist == dist13);
   }

   if (dist12 == dist14 && 2*dist12 == dist13) {
      int dist = squareDist(p2, p3);
      return (dist == squareDist(p3, p4) && dist == dist12);
  }
  return false;
}

int main() {
   Point p1 = {20, 10}, p2 = {10, 20}, p3 = {20, 20}, p4 = {10, 10};
   if(isSquare(p1, p2, p3, p4))
      cout << "点正在形成一个正方形。";
   else
      cout << "Points are not forming a square";
}

输出结果

点正在形成一个正方形。
 类似资料:
  • 问题内容: 好的,所以我正在为Java类做一个赋值,赋值的一部分是找出一个点是否在矩形的尺寸之内。所以我创建了这段代码: 我也创建了一个类,这就是为什么我要求一个参数的原因。为了测试这一点,我在Main类中创建了一个简单的语句: 点的位置是(6,7)。矩形1的点,宽度和高度分别为(4,5),9和3。我知道这一点在第一个矩形内,但没有显示该语句,这意味着我创建的i 一定有问题,但我没有看到错误,也许

  • 我正在准备面试,遇到了这个问题: 编写一个程序,检查数字n是否为x^y形式。众所周知,n,x和y是整数,x和y大于2。 我想拿日志之类的东西,但不知道如何检查数字是否符合表格。你们谁能帮忙吗?:)

  • 我试图写一个方法来检查一个给定的单词是否是回文,但到现在为止它还不能工作。我怀疑错误出在if语句中,而且您没有将对象(如字符串)与==进行比较,而是与equals进行比较,对吗?但是Java不允许我写:if(firstthalf.charat(i).equals(secondhalf.charat(j))),那么我该怎么做才能使它工作呢?代码中还有其他错误吗? null null 提前道谢! /尼

  • null 什么做法更好,更“真实”?我喜欢第一个,但再次,不确定我该如何选择Epsilon。

  • 我有一个旋转45°的矩形,如下图所示,我有所有四个角的点,我需要找出给定点是否在旋转矩形的边界内。请注意,旋转将更改为任何数字,因此旋转需要成为公式的一部分。 所以我们有: 宽度:10 高度: 10 旋转角度:45度 旋转矩形的坐标:A B C D 给定坐标:E 感谢任何帮助。

  • 问题内容: 我有一个小程序,允许用户输入一些正则表达式。之后,我想检查此输入是否为 有效的 正则表达式。 我想知道Java中是否有内置方法,但是找不到这种喷射器。 你能给我一些建议吗? 问题答案: 这是一个例子。 然后输出,例如。