描述
如下图,AB 是圆的一条弦,ABC形成一个弓形,在两行中分别输入AB和CD的长度,计算并分两行依次输出该圆的半径和弓形ABC的面积,结果均严格保留小数点后2位有效数字,应用三角函数和反三角函数时查阅math模块文档或利用自动补全完成。
提示:
从图中可知:
AD = AB / 2 OA2 = AD2 + OD2 OD = OC – CD = OA – CD
代入后可得
OA = (AD2 + CD2 ) / (2 CD) sin(∠AOB / 2) = AD / OA
圆心角:
∠AOB = 2 arcsin(AD / OA)
扇形AOB的面积为:
area_of_sector = ∠AOB / (2π) π OA2
三角形 △AOB
area_of_triangle = 1 / 2 OA2 sin(∠AOB)
弓形面积为扇形AOB面积减去三角形△AOB面积之差:
area_of_arch = area_of_sector - area_of_triangle
输入
分2行输入2个浮点数
输出
在两行内分别输出半径和弓形面积
示例
输入:
26.5
8
输出
14.97
151.16
参考代码
# ------------ ------- -------- ----------- -----------
# @File : 3.4.1 计算弓形的面积.py
# @Contact : vasp@qq.com
# @Copyright : 2018-2025, Wuhan University of Technology
# @Modify Time: 2021/4/26 11:06
# @Author : 赵广辉
# @Version : 1.0
# @License : 仅限用于Python程序设计基础实践教程(赵广辉,高等教育出版社)配套实验
# ------------ ------- -------- ----------- -----------
# AB 是圆的一条弦,ABC 形成一个弓形,在两行中分别输入AB 和CD 的长度,
# 计算弓形的面积,结果保留小数点后2 位有效数字。
# 注意math库中反三角函数的写法
# 测试用例:
# 输入:
# >>>26.5
# >>>8
# 输出:
# 14.97
# 151.16
import math
AB = float(input()) # 弦长度
CD = float(input()) # 弓高度
# 半弦长
AD = AB / 2
# 半径
OA = (AD ** 2 + CD ** 2) / (2 * CD)
# 圆心角
AOB = 2 * math.asin(AD / OA)
# 拱形所在扇形的面积
area_of_sector = AOB / (math.pi * 2) * math.pi * OA ** 2
# 三角形面积
area_of_triangle = 1/2 * OA * OA * math.sin(AOB)
# 拱形面积
area_of_arch = area_of_sector - area_of_triangle
print(round(OA, 2))
print(round(area_of_arch, 2))
# ------------ ------- -------- ----------- -----------
# @File : 3.4.1 计算弓形的面积.py
# @Contact : vasp@qq.com
# @Copyright : 2018-2025, Wuhan University of Technology
# @Modify Time: 2021/4/26 11:06
# @Author : 赵广辉
# @Version : 1.0
# @License : 仅限用于Python程序设计基础实践教程(赵广辉,高等教育出版社)配套实验
# ------------ ------- -------- ----------- -----------
# AB 是圆的一条弦,ABC 形成一个弓形,在两行中分别输入AB 和CD 的长度,
# 计算弓形的面积,结果保留小数点后2 位有效数字。
# 注意math库中反三角函数的写法
# 测试用例:
# 输入:
# >>>26.5
# >>>8
# 输出:
# 14.97
# 151.16
import math
def area_of_arch(chord,arch):
"""接受弦长和弓高为参数,计算并返回弓形面积"""
half_of_chord = chord / 2 # 半弦长
radius = (half_of_chord ** 2 + arch ** 2) / (2 * arch)# 半径
central_angle = 2 * math.asin(half_of_chord / radius)# 圆心角
# 拱形所在扇形的面积
area_of_sector = central_angle / (math.pi * 2) * math.pi * radius ** 2
# 三角形面积
area_of_triangle = 1/2 * radius * radius * math.sin(central_angle)
# 拱形面积
area_of_arch = area_of_sector - area_of_triangle
return radius,area_of_arch
if __name__ == '__main__':
length_of_chord = float(input()) # 弦长度
height_of_arch = float(input()) # 弓高度
r,area = area_of_arch(length_of_chord, height_of_arch)
print(round(r, 2))
print(round(area, 2))