已知四個坐標點,怎樣求出四邊形的四個內角

1,理論

最簡單的方式利用向量進行求解

?如圖可得:

cosθ=a*b/(|a|*|b|)

已知三點坐標,很容易可以得到兩向量之積a*b,以及每個的模值

2,四個角度求解過程

  1. 首先,我們定義了四個坐標點pointApointBpointCpointD,這些點構成了一個四邊形。

  2. 接下來,我們調用calculateAngle方法來計算四邊形的每個內角。calculateAngle方法接受三個參數,分別是三個點的坐標,用于計算夾角。

  3. calculateAngle方法中,我們首先計算向量1的x和y分量,即點p1與點p2之間的向量。然后計算向量2的x和y分量,即點p3與點p2之間的向量。

  4. 接著,我們計算向量1和向量2的點積,即dotProduct = vector1x * vector2x + vector1y * vector2y

  5. 計算向量1和向量2的模,即各自的長度,使用Math.sqrt()方法計算平方根。

  6. 接下來,我們計算夾角的余弦值,即cosTheta = dotProduct / (magnitude1 * magnitude2)

  7. 最后,我們使用Math.acos()方法計算夾角的弧度值,并將其轉換為度數,使用Math.toDegrees()方法。

  8. main方法中,我們依次計算四邊形的四個內角,并將其打印輸出。

3,代碼實現

import java.awt.geom.Point2D;public class QuadrilateralAngles {public static void main(String[] args) {// 四個坐標點Point2D.Double pointA = new Point2D.Double(0, 0);Point2D.Double pointB = new Point2D.Double(1, 1);Point2D.Double pointC = new Point2D.Double(0, 1);Point2D.Double pointD = new Point2D.Double(-1, 0);// 計算四邊形的四個內角double angleA = calculateAngle(pointD, pointA, pointB);double angleB = calculateAngle(pointA, pointB, pointC);double angleC = calculateAngle(pointB, pointC, pointD);double angleD = calculateAngle(pointC, pointD, pointA);// 輸出結果System.out.println("Angle A: " + angleA);System.out.println("Angle B: " + angleB);System.out.println("Angle C: " + angleC);System.out.println("Angle D: " + angleD);}// 計算夾角的方法public static double calculateAngle(Point2D.Double p1, Point2D.Double p2, Point2D.Double p3) {// 計算向量1的x和y分量double vector1x = p1.getX() - p2.getX();double vector1y = p1.getY() - p2.getY();// 計算向量2的x和y分量double vector2x = p3.getX() - p2.getX();double vector2y = p3.getY() - p2.getY();// 計算向量1和向量2的點積double dotProduct = vector1x * vector2x + vector1y * vector2y;// 計算向量1和向量2的模double magnitude1 = Math.sqrt(vector1x * vector1x + vector1y * vector1y);double magnitude2 = Math.sqrt(vector2x * vector2x + vector2y * vector2y);// 計算兩向量夾角的余弦值double cosTheta = dotProduct / (magnitude1 * magnitude2);// 計算夾角的弧度值double theta = Math.acos(cosTheta);// 將弧度轉換為度數并返回return Math.toDegrees(theta);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39533.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39533.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39533.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在數字游民天堂,Polkadot Hubs 探索建設更緊密的全球社區

分布式辦公是 Web3 行業的協作常態,當數字游民們享受著線上遠程工作的自由和便捷時,也在懷念著一種面對面與他人交流與共創的經歷。共享空間隨之興起,為許多初創項目公司提供開放舒適的環境,卻難以在不同的人群之間搭起一張巨大的…

系統架構設計師考試大綱(2017年)

1.考試目標 考試合格人員應能夠根據系統需求規格說明書,結合應用領域和技術發展的實際情況,考慮有關約束條件,設計正確、合理的軟件架構,確保系統架構具有良好的特性;能夠對項目系統架構進行描述、分析、設計與評估;能夠按照相關標準編寫相應的設計文檔;能夠與系統分析師…

完美解決Github提交PR后報錯:File is not gofumpt-ed (gofumpt)

問題闡述 最近在Github上提交PR后,遇到了這么一個問題:golangci-lint運行失敗,具體原因是File is not gofumpt-ed (gofumpt)。 名詞解釋 golangci-lint: golangci-lint 是Go語言社區中常用的代碼質量檢查工具,它可以…

react中使用shouldComponentUpdate生命周期函數調用setState引起的無限循環的錯誤

場景: 在 React 組件中,當在 componentWillUpdate 或 componentDidUpdate 生命周期方法中調用 setState 時,會觸發無限循環,導致超過最大更新深度。 錯誤原因 在React組件中 ,我們使用componentWillUpdate 或 componen…

Windows 2016安裝Jenkins

Jenkins 下載,安裝 下載OpenJDK 11 for Wndows 兩種方式 choco install openjdk11 https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.20%2B8/OpenJDK11U-jdk_x64_windows_hotspot_11.0.20_8.msi how to enable administrator user to …

[自學記錄06|*百人計劃]Gamma矯正與線性工作流

一、前言 Gamma矯正其實也屬于我前面落下的一塊內容,打算把它補上,其它的沒補是因為我之前寫的GAMES101筆記里已經涵蓋了,而Gamma矯正在101里面確實沒提到,于是打算把它補上,這塊內容并不難,但是想通透的理…

我的創作紀念日(256天)

前言 結緣 我與csdn的結緣,之前在創作紀念日(128天)便已提到,今在此便不再多言 收獲 很慚愧,自六月底至八月中旬,因為忙于找工作,奔赴面試求職之際,寫博客沒有像之前那么勤&#x…

qt QPalette的原理與使用

QPalette類用于控制控件的風格,即任意一個地方的繪制方式。每個控件或者說qwidget對象內部都有一個QPalette對象。 在paintEvent(QPaintEvent *event)函數中,其實就是調用該控件的QPalette內容來進行繪制的了。 例如: QStyleOptionTab opt…

《論文閱讀12》RandLA-Net: Ef?cient Semantic Segmentation of Large-Scale Point Clouds

一、論文 研究領域:全監督3D語義分割(室內,室外RGB,kitti)論文:RandLA-Net: Ef?cient Semantic Segmentation of Large-Scale Point Clouds CVPR 2020 牛津大學、中山大學、國防科技大學 論文鏈接論文gi…

Kafka-eagle監控平臺

Kafka-Eagle簡介 在開發工作中,當業務不復雜時,可以使用Kafka命令來進行一些集群的管理工作。但如果業務變得復雜,例如:需要增加group、topic分區,此時,再使用命令行就感覺很不方便,此時&#x…

Vim學習(二)—— 編譯C程序

打開終端,這里以MobaXterm為例, 郵件創建新的空文件并命名, 然后cd到對應路徑下,用 vim hello.cvim打開創建的文件,進入編輯模式,編輯完程序后按Esc退出編輯模式,輸入 :wq保存并退出&#xf…

linux安裝wkhtmltopdf(清晰明了)

概述 在公司項目中使用到 wkhtmltopdf 轉換PDF,由于 wkhtmltox-0.12.5 版本 echarts 圖形虛線樣式,需要升級 wkhtmltox-0.12.6 版本來解決。 官網地址 wkhtmltopdf :https://wkhtmltopdf.org/ windows 安裝 下載流程及安裝流程 進入官…

C++ 關鍵字override,final的作用

文章目錄 一、為什么要引入這兩個關鍵字?1.虛函數復寫2. 類繼承 二、override三、final C11引入這兩個關鍵字 一、為什么要引入這兩個關鍵字? 1.虛函數復寫 不能阻止某個虛函數進一步重寫 本意寫一個新函數,錯誤重寫基類虛函數(子類中 virtual 關鍵字可省略) 本…

《系統架構設計師教程》重點章節思維導圖

內容來自《系統架構設計師教程》,篩選系統架構設計師考試中分值重點分布的章節,根據章節的內容整理出相關思維導圖。 重點章節 第2章:計算機系統知識第5章:軟件工程基礎知識第7章:系統架構設計基礎知識第8章&#xff1…

接口自動化框架httprunner 是如何生成動態類

HttpRunner 是一個用于接口自動化測試的工具,它使用了 Python 中的 type 函數來生成動態類。 在 HttpRunner 中,通過使用 type 函數和 GenericTestCaseMeta 元類,動態地生成測試用例類。 下面是一個示例代碼展示了如何使用 type 函數來生成…

Kotlin反射訪問androidx.collection.LruCache類私有變量

Kotlin反射訪問androidx.collection.LruCache類私有變量 androidx.collection.LruCache類中定義了一個名為map的LinkedHashMap,map存儲了所有LruCache的數據,有時候需要遍歷訪問該LinkedHashMap,取出里面的值,但是LruCache代碼實…

GPU Dissolve(GPU 消散)學習GPU Instancing

一:摘要 通過制作一個模型GPU消散效果來學習GPU Instancing 也就是實例化。 目標效果是楊超大佬文章《GPU shatter》里面的消散效果如圖: Tags:模型頂點分裂(Mesh Vertex Splitting), 實例化繪制(GPU Instancing Drawing)&#x…

開源可商業運營的ChatGpt網頁源碼v1.2.2

🤖 主要功能 后臺管理系統,可對用戶,Token,商品,卡密等進行管理 精心設計的 UI,響應式設計 極快的首屏加載速度(~100kb) 支持Midjourney繪畫和DALLE模型繪畫,GPT4等應用 海量的內置 prompt 列表,來自中文和英文 一鍵導…

【猿灰灰贈書活動 - 02期】- 【Java從入門到精通2023年7月最新(第7版)】

說明:博文為大家爭取福利,與清華大學出版社合作進行送書活動 圖書:《Java從入門到精通》 一、好書推薦 圖書介紹 Java入門經典,95萬Java程序員的入行選擇。配備升級版Java開發資源庫,在線大咖課在線答疑,學…

C語言 棱形圖案

目錄 一、問題分析 上部分: 下部分: 二、代碼演示 一、問題分析 如上圖所示,我們可以將棱形進行拆解,分為上下兩個部分。 上部分: 通過觀察,我們得到 單邊空格數 上半部分總行數 - 行數 - 1 …