已知四个坐标点,怎样求出四边形的四个内角

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.mzph.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: Efficient Semantic Segmentation of Large-Scale Point Clouds

一、论文 研究领域:全监督3D语义分割(室内,室外RGB,kitti)论文:RandLA-Net: Efficient 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 …