返回X的元素的反余弦(cos^-1)(以度为单位),该函数同时接受实数和复数输入.
Y=acosd(X)
对于X在区间[-1, 1]内的实数值,acos(X)返回区间[0, 180]内的值.
对于X在区间[-1,1]之外的实数值以及X的复数值,acos(X)返回复数值.
X是标量,向量,矩阵,多维数组
1. 标量输入(数值)
acosd(0.5)
# 输出: 60.0
acosd(-1)
# 输出: 180.0
2. 标量输入(符号表达式)
acosd((l_1**2 + l_2**2 - d**2)/(2*l_1*l_2))
# 输出: 57.2957795130823*acos((-d**2 + l_1**2 + l_2**2)/(2*l_1*l_2))
3. 向量输入(一维数组)
acosd([0.98, 0.87, 0.5, 0.0, -0.34])
# 输出: [11.4783409545336, 29.5413605001428, 60.0, 90.0, 109.876874070079]
4. 矩阵输入(二维数组)
acosd([[1, 0, 0], [0, 0.5, -0.866], [0, 0.866, 0.5]])
# 输出: [[0, 90.0, 90.0], [90.0, 60.0, 149.997089068812],
[90.0, 30.002910931188, 60.0]]
5. 多维数组输入
acosd([[[0.8, 0.6], [0.0, 1.0]], [[-0.4, 0.9], [0.7, 0.7]]])
# 输出: [[[36.869897645844, 53.130102354156],
[90.0, 0]],
[[113.578178478202, 25.8419327631671],
[45.5729959991943, 45.5729959991943]]]
6. 复数输入
acosd(0.5 + 0.5j)
# 输出: 64.0863538135061 - 30.4032909748219*I
7. 机器人运动学
# 计算机械臂关节角度
# 已知目标位置的坐标(x,y,z)
x, y, z = 0.3, 0.4, 0.5
l1, l2 = 0.5, 0.5
d = sp.sqrt(x**2 + y**2 + z**2)
# 结果给出肩关节角度
acosd((l1^2 + d^2 - l2^2)/(2*l1*d))
# 输出: 45
8. 计算机图形学
# 计算光线与表面法线的夹角(用于光照计算)
normal_vector = [0, 0, 1] # 表面法线
light_vector = [0.5, 0.5, 0.707] # 光线方向
dot_product = np.dot(normal_vector, light_vector)
# 理想漫反射强度与cosθ成正比
acosd(dot_product) # cosθ = n·l
# 输出: 45.0086516628380
9. 结构工程
# 计算桁架结构中杆件的夹角
# 已知节点坐标
A = [0, 0]
B = [3, 0]
C = [0, 4]
# 计算AB与AC的夹角
vector_AB = [B[0]-A[0], B[1]-A[1]]
vector_AC = [C[0]-A[0], C[1]-A[1]]
cos_angle = np.dot(vector_AB, vector_AC)/(np.linalg.norm(vector_AB)*np.linalg.norm(vector_AC))
acosd(cos_angle)
#输出 90.0
10. 地理信息系统
# 计算两个地理位置之间的大圆角距离
# 已知两点的经纬度
lat1, lon1 = 40.7128, -74.0060 # 纽约
lat2, lon2 = 51.5074, -0.1278 # 伦敦
# 使用Haversine公式中的中间值
φ1, φ2 = np.radians(lat1), np.radians(lat2)
Δλ = np.radians(lon2 - lon1)
cos_angle = np.sin(φ1)*np.sin(φ2) + np.cos(φ1)*np.cos(φ2)*np.cos(Δλ)
acosd(cos_angle)
#输出 50.0942115600607
# Copyright 2025 小塔立软件有限公司及其旗下网站:www.qikjik.com
# Licensed under the MIT License.
import sympy as sp
import numpy as np
def qikjik_acosd(input_str):
"""
计算输入表达式的反余弦值,并将结果转换为度数。
参数:
input_str: 输入的字符串表达式,可以是数字、符号或矩阵。
返回:
如果输入有效,则返回计算结果;否则返回错误信息。
"""
try:
# 将输入字符串转换为 SymPy 表达式
expr = sp.sympify(input_str)
error = False
result = None
if expr.free_symbols:
result = sp.acos(expr) * 180 / sp.pi
elif expr.is_number:
# 确保 SymPy 表达式被求值为数值
numeric_value = complex(expr)
# 使用 NumPy 计算反余弦(以弧度为单位)
rad_value = np.arccos(numeric_value)
# 将弧度转换为度
result = rad_value * 180 / np.pi
else:
error = True
# 如果发生错误,返回错误信息
return result if not error else f"输入错误: {input_str}"
except Exception as e:
return f"错误: {e}"
def main():
"""
主函数,用于演示 acosd_inverse_cosine 函数的使用。
"""
# 示范代码
input_examples = [
"0.5", # 数字输入 #结果: (60.00000000000001+0j)
"x", # 符号输入 #结果: 180*acos(x)/pi
]
for input_str in input_examples:
print(f"输入: {input_str}")
result = qikjik_acosd(input_str)
print(f"结果: {result}\n")
if __name__ == "__main__":
main()