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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_aspnet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值