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

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.hqwc.cn/news/69829.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务学习笔记-基本概念

微服务是一种经过良好架构设计的分布式架构方案。根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。 微服务的架构特征: 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力&…

Vivado使用入门之二:网表物理约束

目录 一、背景 二、物理约束 2.1 概念 2.2 网表约束 2.2.1 CLOCK_DEDICATED_ROUTE 2.2.2 MARK_DEBUG 2.2.3 DONT_TOUCH 2.2.4 LOCK_PINS 三、位置约束 四、布线约束 4.1 route 4.2 assign routing mode 五、参考 一、背景 在工程设计中为了保证上板后功能正常&…

RabbitMQ工作流程详解

1 生产者发送消息的流程 (1)生产者连接RabbitMQ,建立TCP连接(Connection),开启信道(Channel) (2)生产者声明一个Exchange (交换器),并设置相关属性,比如交换器类型、是否持久化等 (3)生产者声明一个队列井设置相关属性&#xf…

eachars 自适应

目录 1. 案例: 2. 原因: 3. 解决: 1. 案例: 默认是正常宽度(如图1),当再次跳转会该页面时,eachars图发生变化(如图2)。 图1 图2 2. 原因: 没有…

Gitlab-第四天-CD到k8s集群的坑

一、.gitlab-ci.yml #CD到k8s集群的 stages: - deploy-test build-image-deploy-test: stage: deploy-test image: bitnami/kubectl:latest # 使用一个包含 kubectl 工具的镜像 tags: - k8s script: - ls -al - kubectl apply -f deployment.yaml # 根据实际情况替换…

Redis持久化——RDB和AOF

Redis数据库是内存数据库,一旦出现服务宕机,那么内存中的数据就容易丢失。所以需要进行redis的持久化动作。 Redis持久化是指将Redis内存数据持存储到磁盘中,若出现了Redis服务宕机后,能够从硬盘中再恢复到Redis内存中。 Redis的持…

公司电脑三维图纸加密、机械图挡加密软件

机械图纸加密软件的问世,让很多的网络公司都大受其带来的工作中的便利。在安装了机械图纸加密软件后,不仅可以很好的管理员工在工作时的上网娱乐,在对整个公司员工的工作效率上也有着明显的提高,那么对于机械图纸加密软件的具体特…

Docker一键部署项目,无需登录XShell

文章目录 一键部署项目Docker手动部署SpringBoot项目编写docker部署的脚本文件script.sh 脚本内容 特别注意!编写dockerfiledockerfile 文件内容 上传后端服务的jar包到服务器中执行 script 脚本部署后端服务 自动部署SpringBoot项目引入jsch依赖编写jsch工具类执行…

【T+】畅捷通T+修改数据精度小数点,提示小数位数只能改大。

【问题描述】 使用畅捷通T软件过程中, 修改数据精度过程中,由于误操作,误将数量小数位数改大,并且保存了。 但是看软件的说明以及提示, 软件提示:数量小数位只能改大。 软件说明:建账后位数只能…

Vue+SpringBoot后台管理系统:Vue3+TypeScript项目搭建(一)

写在开始:一个搬砖程序员的随缘记录文章目录 一、Node安装二、Vue CLI安装三、相关的版本四、创建Vue3TypeScript项目五、Vue项目初始化六、项目启动 一、Node安装 查看Note版本 node -v查看npm版本 npm -v然后将npm升级至最新版本 npm -g install npm将npm下载源换至http:…

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

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

Spring的三种异常处理方式

1.SpringMVC 异常的处理流程 异常分为编译时异常和运行时异常,编译时异常我们 try-cache 进行捕获,捕获后自行处理,而运行时异常是不 可预期的,就需要规范编码来避免,在SpringMVC 中,不管是编译异常还是运行…