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

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 行业的协作常态,当数字游民们享受着线上远程工作的自由和便捷时,也在怀念着一种面对面与他人交流与共创的经历。共享空间随之兴起,为许多初创项目公司提供开放舒适的环境,却难以在不同的人群之间搭起一张巨大的…

完美解决Github提交PR后报错:File is not gofumpt-ed (gofumpt)

问题阐述 最近在Github上提交PR后,遇到了这么一个问题:golangci-lint运行失败,具体原因是File is not gofumpt-ed (gofumpt)。 名词解释 golangci-lint: golangci-lint 是Go语言社区中常用的代码质量检查工具,它可以…

[自学记录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 安装 下载流程及安装流程 进入官…

《系统架构设计师教程》重点章节思维导图

内容来自《系统架构设计师教程》,筛选系统架构设计师考试中分值重点分布的章节,根据章节的内容整理出相关思维导图。 重点章节 第2章:计算机系统知识第5章:软件工程基础知识第7章:系统架构设计基础知识第8章&#xff1…

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 …

Nginx详解

1、高并发时代 单台tomcat在理想情况下可支持的最大并发数量在200~500之间,如果大于这个数量可能会造成响应缓慢甚至宕机。 解决方案是通过多台服务器分摊并发压力,这不仅需要有多台tomcat服务器,还需要一台服务器专门用来分配请求。这既是…

Mysql - 配置Mysql主从复制-keepalived高可用-读写分离集群

目录 高可用: 为什么需要高可用呢? 高可用的主要作用: keepalived是什么?它用在哪里? 什么是VRRP协议,它的作用是什么? 搭建一个基于keepalived的高可用Mysql主从复制读写分离集群 一、项…

Vue Baidu Map--自定义点图标bm-marker

自定义点图标 将准备好的图标放到项目中 使用import引入&#xff0c; 并在data中进行声明 <script> import mapIconRed from ./vue-baidu-map/img/marker_red_sprite.png export default {data() {return {mapIconRed,}}, } </script>在<bm-marker>中加入参…

【Linux】进程的基本属性|父子进程关系

个人主页&#xff1a;&#x1f35d;在肯德基吃麻辣烫 我的gitee&#xff1a;Linux仓库 个人专栏&#xff1a;Linux专栏 分享一句喜欢的话&#xff1a;热烈的火焰&#xff0c;冰封在最沉默的火山深处 文章目录 前言进程属性1.进程PID和PPID2.fork函数创建子进程1&#xff09;为什…

C语言学习笔记---数据的存储详解

C语言程序设计笔记---015 C语言数据的存储1、数据类型的意义1.1、unsigned与signed数据类型例程11.2、补码与原码相互转换例程2 2、大小端的介绍2.1、大小端的例程12.2、大小端的例程2 --- 判断当前编译器环境属于大端或小端 3、综合练习题探究数据的存储3.1、练习题13.2、练习…