C# 找出给定三角形的所有角度(Find all angles of a given triangle)

 给定三角形在二维平面上所有三个顶点的坐标,任务是找到所有三个角度。
示例: 

输入:A = (0, 0), 
        B = (0, 1), 
        C = (1, 0)
输出:90, 45, 45
 

为了解决这个问题,我们使用下面的余弦定律。 

c^2 = a^2 + b^2 - 2(a)(b)(cos beta)

重新安排后 

beta = acos( ( a^2 + b^2 - c^2 ) / (2ab) )

在三角学中,余弦定律(也称为余弦公式或余弦规则)将三角形边的长度与其某个角的余弦联系起来。

首先,计算所有边的长度。然后应用上述公式得到所有角度的弧度。然后将角度从弧度转换为度数。

以下是上述步骤的实施:

// C# Code to find all three angles 
// of a triangle given coordinate 
// of all three vertices 
using System; 
      
class GFG 

    class Point 
    { 
        public int x, y; 
        public Point(int x, int y) 
        { 
            this.x = x; 
            this.y = y; 
        } 
    } 
      
    // returns square of distance b/w two points 
    static int lengthSquare(Point p1, Point p2) 
    { 
        int xDiff = p1.x - p2.x; 
        int yDiff = p1.y - p2.y; 
        return xDiff * xDiff + yDiff * yDiff; 
    } 
      
    static void printAngle(Point A, Point B, Point C) 
    { 
        // Square of lengths be a2, b2, c2 
        int a2 = lengthSquare(B, C); 
        int b2 = lengthSquare(A, C); 
        int c2 = lengthSquare(A, B); 
          
        // length of sides be a, b, c 
        float a = (float)Math.Sqrt(a2); 
        float b = (float)Math.Sqrt(b2); 
        float c = (float)Math.Sqrt(c2); 
          
        // From Cosine law 
        float alpha = (float) Math.Acos((b2 + c2 - a2) /  
                                           (2 * b * c)); 
        float betta = (float) Math.Acos((a2 + c2 - b2) /  
                                           (2 * a * c)); 
        float gamma = (float) Math.Acos((a2 + b2 - c2) /  
                                           (2 * a * b)); 
          
        // Converting to degree 
        alpha = (float) (alpha * 180 / Math.PI); 
        betta = (float) (betta * 180 / Math.PI); 
        gamma = (float) (gamma * 180 / Math.PI); 
          
        // printing all the angles 
        Console.WriteLine("alpha : " + alpha); 
        Console.WriteLine("betta : " + betta); 
        Console.WriteLine("gamma : " + gamma); 
    } 
      
    // Driver Code 
    public static void Main(String[] args)  
    { 
        Point A = new Point(0, 0); 
        Point B = new Point(0, 1); 
        Point C = new Point(1, 0); 
      
        printAngle(A, B, C); 
    } 

  
// This code is contributed by Rajput-Ji  

 输出: 

alpha : 90
beta : 45
gamma : 45

时间复杂度:由于使用内置 sqrt 函数,因此为 O(log(n))

辅助空间: O(1)

参考: 
https://en.wikipedia.org/wiki/Law_of_cosines

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/65845.shtml

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

相关文章

【数据结构】(Python)差分数组。差分数组与树状数组结合

差分数组: 基于原数组构造的辅助数组。用于区间修改、单点查询。区间修改的时间复杂度O(1)。单点查询的时间复杂度O(n)。差分数组的元素:第一个元素等于原数组第一个元素,从第二个元素开始是原数组对应下标的元素与前一个元素的差&#xff0…

HTML 元素:网页构建的基础

HTML 元素:网页构建的基础 HTML(HyperText Markup Language,超文本标记语言)是构建网页的基石。它定义了网页的结构和内容,而HTML元素则是构成HTML文档的基石。在本篇文章中,我们将深入探讨HTML元素的概念、类型、用法,以及如何在网页设计中有效地使用它们。 什么是HT…

前端往后端传递参数的方式有哪些?

文章目录 1. URL 参数1.1. 查询参数(Query Parameters)1.2. 路径参数(Path Parameters) 2. 请求体(Request Body)2.1. JSON 数据2.2. 表单数据2.3. 文件上传 3. 请求头(Headers)3.1. 自定义请求…

记录媒体查询@media的用法

常见的PC分辨率 1024*500 (8.9寸) 1024*768 (比例4:3 | 10.4寸、12.1寸、14.1寸、15寸; ) 1280*800(16:10 |15.4寸) 1280*1024(比例:5:4 | 14.1寸、15…

修复OpenHarmony系统相机应用横屏拍照按钮点不到的问题

适配OpenHarmony系统相机应用横屏UI, 相关pr: https://gitee.com/openharmony/applications_camera/pulls/233/files 适配效果 如何安装 编译好的hap提供在附件中 1.预置在源码,随固件安装 2.安装hap hdc shell "mount -o remount,rw /"…

debian系linux安装mysql

准备环境 (1) 先查询是否有安装mariadb,如果有,先执行以下命令卸载mariadb sudo apt-get remove --purge mariadb-server mariadb-client(2) 安装libncurses.so.5和libtinfo.so.5库文件 在数据库登录时会用到,执行以下命令查询 find / -type f -name …

10-Gin 文件上传 --[Gin 框架入门精讲与实战案例]

使用 Gin 框架处理文件上传是一个常见的任务,Gin 提供了简单而直观的方法来处理文件上传。下面将介绍如何用 Gin 实现文件上传功能。 1. 安装 Gin 如果你还没有安装 Gin,可以通过 Go 的包管理工具 go get 来安装: go get -u github.com/gi…

【react】常见的性能优化 1

目录 常见的 React 性能优化手段 1. 使用 useMemo 和 useCallback 缓存数据和函数 2. 使用 React.memo 缓存组件 3. 组件懒加载 4. 合理使用 key 5. 在组件销毁时清除定时器/事件 6. 使用 Suspense 和 Lazy 拆分组件 7. 使用 Fragment 避免额外标记 8. 避免使用内联函…

Promise实现原理解析,及实现方法。

Promise原理解析 Promise的介绍原理分析源码实现发布部分全部代码订阅部分基础代码简单发布订阅完整代码测试订阅能力链式调用的实现完整链式调用代码链式调用Promise完整功能代码 Promise的介绍 一,Promise的理解 在JavaScript中,Promise是一种用于处理…

http报头解析

http报文 http报文主要有两类是常见的,第一类是请求报文,第二类是响应报文,每个报头除了第一行,都是采用键值对进行传输数据,请求报文的第一行主要包括http方法(GET,PUT, POST&#…

【日常开发】Git Stash使用技巧

文章目录 引言一、git stash 基础命令(一)存储当前工作区的修改(二)查看存储列表 二、查看存储的内容(一)查看特定存储的详细内容(二)查看特定存储修改的文件列表 三、恢复存储的修改…

微服务保护-sentinel

为什么要有微服务保护? 微服务保护是为了避免微服务雪崩而出现的,每个微服务能处理的请求是有限的,如果一个微服务出现问题导致一个请求进入微服务的时间太久,就会导致大量去请求停滞在微服务内部,这样就会过分占用系统…

【Redis】Redis 典型应用 - 缓存 (cache)

目录 1. 什么是缓存 2. 使用 Redis 作为缓存 3. 缓存的更新策略 3.1 定期生成 3.2 实时生成 4. 缓存的淘汰策略 5. 缓存预热, 缓存穿透, 缓存雪崩 和 缓存击穿 关于缓存预热 (Cache preheating) 关于缓存穿透 (Cache penetration) 关于缓存雪崩 (Cache avalanche) 关…

关于easy-es对时间范围查询遇到的小bug

前言:在使用easy-es之前作为一个小白的我只有es原生查询的基础,在自己通过查看官方文档自学easy-es遇到了一个挫折,其他的还好语法和MybatisPlus差不多,正以为我觉得很快就能入手,在对时间范围的判断就给我当头一棒&am…

Python读取TIF文件

在Python中,逐帧读取TIFF文件(尤其是多页TIFF文件)可以使用tifffile库或Pillow库。以下是两种方法的示例: 方法 1:使用 tifffile 逐帧读取 tifffile 是一个专门用于处理TIFF文件的库,支持多页TIFF文件的逐…

只谈C++11新特性 - 显式转换函数

显式转换函数 背景与问题 在 C11 之前&#xff0c;explicit 关键字只能用于构造函数。其作用是阻止构造函数在需要隐式转换时被调用。例如&#xff1a; 示例问题&#xff08;C11 之前的 explicit 用法&#xff09; #include <iostream>class Example { public:explic…

从0到机器视觉工程师(一):机器视觉工业相机总结

目录 相机的作用 工业相机 工业相机的优点 工业相机的种类 工业相机知名品牌 光源与打光 打光方式 亮暗场照明 亮暗场照明的应用 亮暗场照明的区别 前向光漫射照明 背光照明 背光照明的原理 背光照明的应用 同轴光照明 同轴光照明的应用 总结 相机的作用 相机…

HTML——53. 创建表单

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>创建表单</title></head><body><!--form标签用于创建一个表单&#xff0c;会将里面的内容一起发送服务器&#xff0c;其结构类似于表格--><!--表…

逐行讲解大模型流式输出 streamer 源码

目录 简介TextStreamer 基础流式输出TextIterateStreamer 迭代器流式输出本地代码模型加载并前端展示streamlit 输出显示gradio 输出显示 vllm 部署模型并前端展示streamlit 输出显示gradio 输出显示 备注 简介 本文详细讲解了大模型流式输出的源码实现&#xff0c;包括TextSt…

java_使用阿里云oss服务存储图片

什么情况下可以使用阿里云oss服务存储图片&#xff1f; 对图片的访问速度有高要求时使用&#xff0c;方便用户快速的&#xff08;比如在网页页面中&#xff09;访问到图像 参考&#xff1a;41 尚上优选项目-平台管理端-商品信息管理模块-阿里云OSS介绍_哔哩哔哩_bilibili 1.…