中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++怎么判斷四個點是否構成正方形

發布時間:2021-03-26 13:58:51 來源:億速云 閱讀:385 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關C++怎么判斷四個點是否構成正方形,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

判斷方法分為兩步:

1.判斷四條邊是否相等;

2.判斷是否有一個角為直角;

求解兩點之前距離的函數:

double Distance(int x1,int y1,int x2,int y2){
  return sqrt(pow((x1-x2),2)+pow((y1-y2),2));
}

判斷三點連續構成的角是否為直角,第一個點參數為頂點:

bool IsRightAngle(int x1,int y1,int x2,int y2,int x3,int y3){
  if((x2-x1)*(x3-x1)+(y2-y1)*(y3-y1)==0)
    return true;
  return false;
}

完整的程序:

#include <iostream>
#include <math.h>
using namespace std;
//直接調用IsSquare函數,輸入為四個點的坐標,輸出為true or false;
//求兩點間的距離
double Distance(int x1,int y1,int x2,int y2){
  return sqrt(pow((x1-x2),2)+pow((y1-y2),2));
}
//判斷三個點是否構成直角,第一個參數點是頂點
bool IsRightAngle(int x1,int y1,int x2,int y2,int x3,int y3){
  if((x2-x1)*(x3-x1)+(y2-y1)*(y3-y1)==0)
    return true;
  return false;
}
bool IsSquare(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4){
  if(x1==x2&&x2==x3)
    return false;
  double s12=Distance(x1,y1,x2,y2);
  double s13=Distance(x1,y1,x3,y3);
  double s14=Distance(x1,y1,x4,y4);
  double s23=Distance(x2,y2,x3,y3);
  double s24=Distance(x2,y2,x4,y4);
  double s34=Distance(x3,y3,x4,y4);
  if(s12==s13&&s24==s34&&s12==s24){
    if(IsRightAngle(x1,y1,x2,y2,x3,y3)) return true;
    else return false;
  }
  if(s12==s14&&s23==s34&&s12==s23){
    if(IsRightAngle(x1,y1,x2,y2,x4,y4)) return true;
    else return false;
  }
  if(s13==s14&&s23==s24&&s13==s23){
    if(IsRightAngle(x1,y1,x3,y3,x4,y4)) return true;
    else return false;
  }
  return false;
}
int main(){
  int x1,y1,x2,y2,x3,y3,x4,y4;
  cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4;
  cout<<IsSquare(x1,y1,x2,y2,x3,y3,x4,y4)<<endl;
  return 0;
}

測試用例:

0 1 1 0 1 1 0 0

輸出結果為1(true)

補充:判斷四個點是否可以構成矩形(優雅的解法!!!)

首先我們需要先檢查輸入的四個點是不是有重復。然后判斷四個角是不是直角即可。

def isOrthogonal(p1, p2, p3):
  return (p2[0] - p1[0]) * (p2[0] - p3[0]) + (p2[1] - p1[1]) * (p2[1] - p3[1]) == 0
def _isRectangle(p1, p2, p3, p4):
  return self.isOrthogonal(p1, p2, p3) and self.isOrthogonal(p2, p3, p4) and self.isOrthogonal(p3, p4, p1)
def isRectangle(p1, p2, p3, p4):
  return self._isRectangle(p1, p2, p3, p4) or self._isRectangle(p2, p3, p1, p4) or self._isRectangle(p1, p3, p2, p4)

一個更加巧妙地回答,我們可以先計算中點的位置

C++怎么判斷四個點是否構成正方形

然后再計算中點到四個點的距離是不是一樣即可。

def dis(p1, p2):
  return (p1[0] - p2[0])**2 + (p1[1] - p2[1])**2
def isRectangle(p1, p2, p3, p4):
  x_c = (p1[0] + p2[0] + p3[0] + p4[0])/4
  y_c = (p1[1] + p2[1] + p3[1] + p4[1])/4
  d1 = dis(p1, (x_c,y_c))
  d2 = dis(p2, (x_c,y_c))
  d3 = dis(p3, (x_c,y_c))
  d4 = dis(p4, (x_c,y_c))
  return d1 == d2 and d1 == d3 and d1 == d4

關于“C++怎么判斷四個點是否構成正方形”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

小金县| 田林县| 家居| 聊城市| 商洛市| 舞阳县| 西和县| 潞西市| 黑龙江省| 巫山县| 临朐县| 永兴县| 梨树县| 辽宁省| 中西区| 烟台市| 共和县| 阿拉尔市| 德钦县| 长岛县| 睢宁县| 孝昌县| 奈曼旗| 滨海县| 万荣县| 灵丘县| 沧州市| 民和| 三河市| 临漳县| 永和县| 四子王旗| 梨树县| 雷山县| 黎城县| 平果县| 汝南县| 定远县| 沁水县| 商丘市| 阿坝|