最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ 如何判斷四個(gè)點(diǎn)是否構(gòu)成正方形

 更新時(shí)間:2021年03月25日 15:39:19   作者:蹊言君  
這篇文章主要介紹了C++ 如何判斷四個(gè)點(diǎn)是否構(gòu)成正方形的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

判斷方法分為兩步:

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

2.判斷是否有一個(gè)角為直角;

求解兩點(diǎn)之前距離的函數(shù):

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

判斷三點(diǎn)連續(xù)構(gòu)成的角是否為直角,第一個(gè)點(diǎn)參數(shù)為頂點(diǎn):

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;
//直接調(diào)用IsSquare函數(shù),輸入為四個(gè)點(diǎn)的坐標(biāo),輸出為true or false;
//求兩點(diǎn)間的距離
double Distance(int x1,int y1,int x2,int y2){
  return sqrt(pow((x1-x2),2)+pow((y1-y2),2));
}
//判斷三個(gè)點(diǎn)是否構(gòu)成直角,第一個(gè)參數(shù)點(diǎn)是頂點(diǎn)
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;
}

測(cè)試用例:

0 1 1 0 1 1 0 0

輸出結(jié)果為1(true)

補(bǔ)充:判斷四個(gè)點(diǎn)是否可以構(gòu)成矩形(優(yōu)雅的解法!?。。?/strong>

首先我們需要先檢查輸入的四個(gè)點(diǎn)是不是有重復(fù)。然后判斷四個(gè)角是不是直角即可。

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)

一個(gè)更加巧妙地回答,我們可以先計(jì)算中點(diǎn)的位置

然后再計(jì)算中點(diǎn)到四個(gè)點(diǎn)的距離是不是一樣即可。

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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • C++智能指針shared_ptr分析

    C++智能指針shared_ptr分析

    這篇文章主要介紹了C++智能指針shared_ptr分析的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • C語(yǔ)言利用system調(diào)用系統(tǒng)命令行詳情

    C語(yǔ)言利用system調(diào)用系統(tǒng)命令行詳情

    這篇文章主要介紹了C語(yǔ)言利用system調(diào)用系統(tǒng)命令行詳情,system就是調(diào)用系統(tǒng)命令行,輸入為字符串,然后把這個(gè)字符串輸出給命令行,讓命令行執(zhí)行。下文的具體內(nèi)容,需要的小伙伴可以參考一下
    2022-01-01
  • C語(yǔ)言嵌入式實(shí)現(xiàn)支持浮點(diǎn)輸出的printf示例詳解

    C語(yǔ)言嵌入式實(shí)現(xiàn)支持浮點(diǎn)輸出的printf示例詳解

    這篇文章主要為大家介紹了C語(yǔ)言嵌入式實(shí)現(xiàn)支持浮點(diǎn)輸出的printf示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • C語(yǔ)言 存儲(chǔ)類(lèi)詳解及示例代碼

    C語(yǔ)言 存儲(chǔ)類(lèi)詳解及示例代碼

    本篇文章主要介紹C語(yǔ)言 存儲(chǔ)類(lèi),這里幫大家整理了存儲(chǔ)類(lèi)的基礎(chǔ)資料,并提供示例代碼和詳細(xì)介紹,有興趣的小伙伴可以參考下
    2016-08-08
  • C++繼承介紹

    C++繼承介紹

    C++繼承可以是單一繼承或多重繼承,每一個(gè)繼承連接可以是public,protected,private也可以是virtual或non-virtual
    2013-01-01
  • C語(yǔ)言volatile關(guān)鍵字的作用與示例

    C語(yǔ)言volatile關(guān)鍵字的作用與示例

    這篇文章主要介紹了C語(yǔ)言volatile關(guān)鍵字的作用,volatile提醒編譯器它后面所定義的變量隨時(shí)都有可能改變,因此編譯后的程序每次需要存儲(chǔ)或讀取這個(gè)變量的時(shí)候,都會(huì)直接從變量地址中讀取數(shù)據(jù)
    2023-04-04
  • Qt控件之QLabel用法及技巧

    Qt控件之QLabel用法及技巧

    QLabel是Qt中的一個(gè)控件類(lèi),用于顯示文本或圖像的控件類(lèi)之一,本文主要介紹了Qt控件之QLabel用法及技巧,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • C++實(shí)現(xiàn)播放音頻的示例詳解

    C++實(shí)現(xiàn)播放音頻的示例詳解

    這篇文章主要為大家詳細(xì)介紹了C++如何利用第三方庫(kù)實(shí)現(xiàn)播放音頻的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • c++編譯使用log4cplus的詳細(xì)步驟

    c++編譯使用log4cplus的詳細(xì)步驟

    C++很強(qiáng)大,但是仍然有很多不盡如人意的地方,比如打印日志方面就沒(méi)有java的log4j那種信手拈來(lái),自然而然地東西,今天我們說(shuō)一說(shuō)一個(gè)很強(qiáng)大地日志庫(kù)log4cplus在c++項(xiàng)目中地使用,感興趣的朋友一起看看吧
    2023-10-10
  • C++計(jì)算24點(diǎn)的簡(jiǎn)單程序

    C++計(jì)算24點(diǎn)的簡(jiǎn)單程序

    這篇文章主要為大家詳細(xì)介紹了C++計(jì)算24點(diǎn)的簡(jiǎn)單程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評(píng)論

永修县| 新蔡县| 井陉县| 甘洛县| 准格尔旗| 石屏县| 永城市| 呼和浩特市| 禄劝| 凤凰县| 凭祥市| 绥芬河市| 名山县| 仁寿县| 龙江县| 边坝县| 澄江县| 朔州市| 玛纳斯县| 灵石县| 牟定县| 黄龙县| 宁安市| 湘西| 基隆市| 东源县| 磴口县| 彰化市| 东阿县| 大余县| 平乡县| 县级市| 兰坪| 游戏| 麻江县| 宣城市| 平山县| 湘乡市| 米脂县| 阳城县| 阿拉善右旗|