当前位置: 首页 > backend >正文

Java 程序求圆弧段的面积(Program to find area of a Circular Segment)

在圆中,如果画一条弦,那么这条弦将整个圆分成两部分。圆的这两部分称为圆的段。较小的区域称为小段,较大的区域称为大段。
在下图中,弦 AB 将圆分成小段和大段。

已知圆的半径和构成小线段的角度。我们需要求出两个线段的面积。

示例: 

输入:
半径 = 21.0
角度 = 120.0
输出:
小段面积 270.855
大段面积 1114.59

输入:
半径 = 10.0
角度 = 90.0
输出:
小段面积 28.5397
大段面积 285.619

片段面积:
为此,我们将弦的端点与圆心连接起来,形成一个扇形,该扇形在中心处对着某个“角度”。并从弦 AB 上的圆心画一条垂线。根据三角形全等,我们得到 ? AOP = ? BOP = 1/2(角度)。 

线段面积公式: 

线段面积 = 扇形面积 - 三角形 OAB 面积
                = pi * r 2 * (角度/360) -
                  三角形 OAB 面积

有关扇区面积公式的详细信息,请参阅:

Javascript 扇形的面积:Javascript 扇形的面积(Area of a Circular Sector)-CSDN博客
PHP 扇形的面积:PHP 扇形的面积(Area of a Circular Sector)-CSDN博客
C# 扇形的面积:C# 扇形的面积(Area of a Circular Sector)-CSDN博客
Python 扇形的面积:Python 扇形的面积(Area of a Circular Sector)-CSDN博客
Java 扇形的面积:Java 扇形的面积(Area of a Circular Sector)-CSDN博客
C++ 扇形的面积:C++ 扇形的面积(Area of a Circular Sector)-CSDN博客

在上图中,假设扇区形成的角度 = X,
因此? AOP = ? BOP = X/2

三角形 AOB 的面积= 1/2 * 底边 * 高
                     = 1/2 * AB * OP
现在在三角形 AOP 中,根据三角学
Cos(X/2) = OP/AO 即 OP = AO * Cos(X/2) 
                       OP = r * Cos(X/2) 
Sin(X/2) = AP/AO 即 AP = AO * Sin(X/2) 
                       AP = r * Sin(X/2)
所以,底边= AB = AP + PB 
          = 2 * AP 
          = 2 * r * Sin(X/2)高= OP = r * Cos(X/2)三角形面积= 1/2 * (2 * r * Sin(X/2)) * (r * Cos(X/2)) 
                    = 1/2 * r 2 * Sin(X) 
                      [使用恒等式 2 * Sin(A) * Cos(A)] 
                    = Sin(2 * A))
因此线段面积= pi * r 2 * (角度/360) - 1/2 * r 2 * Sin(角度)

示例代码:

// Java Program to find area of 
// segment of a circle 
class GFG { 
static float pi = 3.14159f; 
  
static float area_of_segment(float radius, 
                              float angle) 

    // Calculating area of sector 
    float area_of_sector = pi *  
   (radius * radius) * (angle / 360); 
  
    // Calculating area of triangle 
    float area_of_triangle = 
        (float)1 / 2 * (radius * radius) * 
        (float)Math.sin((angle * pi) / 180); 
  
    return area_of_sector - area_of_triangle; 

  
// Driver Function 
public static void main(String[] args)  

    float radius = 10.0f, angle = 90.0f; 
    System.out.println("Area of minor segment = " + 
                    area_of_segment(radius, angle)); 
  
    System.out.println("Area of major segment = " + 
                    area_of_segment(radius, (360 - angle))); 


  
// This code is contributed by Anant Agarwal. 

输出 : 

小段面积 = 28.5397
大段面积 = 285.619

时间复杂度: O(1) 

辅助空间: O(1)

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

http://www.xdnf.cn/news/9356.html

相关文章:

  • Mico 1.33.1 | 解锁高级版 上千种自定义组件 动态壁纸
  • Java String函数的使用
  • 016搜索之广度优先BFS——算法备赛
  • word中表格拉不动以及插入图片有间距
  • MySQL的参数 innodb_force_recovery 详解
  • vue3+element-plus el-date-picker日期、年份筛选设置本周、本月、近3年等快捷筛选
  • JavaEE初阶-网络编程
  • 使用Mathematica绘制随机多项式的根
  • OpenCV---findCountours
  • [java八股文][JavaSpring面试篇]SpringBoot
  • 前端Vue3列表滑动无限加载实现
  • 佰力博科技与您谈谈高温介电温谱仪如何保养
  • ROS2学习(15)------ROS2 TF2 机器人坐标系管理器
  • MySQL问题:MySQL中使用索引一定有效吗?如何排查索引效果
  • LeetCode-栈-最小栈
  • 现代 CSS 高阶技巧:实现平滑内凹圆角的工程化实践
  • UDP 传输时间(延迟)
  • 关于Oracle SGA内存抖动
  • FastAPI 异常处理
  • vscode ssh远程服务端设置
  • OpenCV视觉图片调整:从基础到实战的技术指南
  • PH热榜 | 2025-05-26
  • hive 笔记
  • WEB安全--RCE--webshell HIDS bypass4
  • PostgreSQL auto_explain
  • Unity3D中Mono与IL2CPP对比
  • 使用mermaid快速绘制流程图
  • 3D Tiles高级样式设置与条件渲染(3)
  • 50多种垃圾类型都能清理Wise便携版:系统临时文件 /浏览器缓存秒清理
  • 利用亮数据实现大规模数据自动抓取