mirror of
https://github.com/fofolee/uTools-quickcommand.git
synced 2025-06-09 06:54:11 +08:00
97 lines
2.3 KiB
JavaScript
97 lines
2.3 KiB
JavaScript
/**
|
|
* 圆形计算
|
|
* @param {number} radius 半径
|
|
* @returns {Object} 计算结果
|
|
*/
|
|
function circle(radius) {
|
|
if (radius < 0) {
|
|
throw new Error("半径不能为负数");
|
|
}
|
|
|
|
return {
|
|
area: Math.PI * radius * radius, // 面积
|
|
perimeter: 2 * Math.PI * radius, // 周长
|
|
diameter: 2 * radius, // 直径
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 矩形计算
|
|
* @param {number} width 宽度
|
|
* @param {number} height 高度
|
|
* @returns {Object} 计算结果
|
|
*/
|
|
function rectangle(width, height) {
|
|
if (width < 0 || height < 0) {
|
|
throw new Error("长度不能为负数");
|
|
}
|
|
|
|
return {
|
|
area: width * height, // 面积
|
|
perimeter: 2 * (width + height), // 周长
|
|
diagonal: Math.sqrt(width * width + height * height), // 对角线长度
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 三角形计算
|
|
* @param {number} a 边长a
|
|
* @param {number} b 边长b
|
|
* @param {number} c 边长c
|
|
* @returns {Object} 计算结果
|
|
*/
|
|
function triangle(a, b, c) {
|
|
if (a < 0 || b < 0 || c < 0) {
|
|
throw new Error("边长不能为负数");
|
|
}
|
|
|
|
// 检查三角形是否合法(任意两边之和大于第三边)
|
|
if (a + b <= c || b + c <= a || a + c <= b) {
|
|
throw new Error("不能构成三角形");
|
|
}
|
|
|
|
// 半周长
|
|
const s = (a + b + c) / 2;
|
|
|
|
// 使用海伦公式计算面积
|
|
const area = Math.sqrt(s * (s - a) * (s - b) * (s - c));
|
|
|
|
// 计算三个角的角度(弧度)
|
|
const angleA = Math.acos((b * b + c * c - a * a) / (2 * b * c));
|
|
const angleB = Math.acos((a * a + c * c - b * b) / (2 * a * c));
|
|
const angleC = Math.acos((a * a + b * b - c * c) / (2 * a * b));
|
|
|
|
// 判断三角形类型
|
|
const angles = [angleA, angleB, angleC].map(
|
|
(angle) => (angle * 180) / Math.PI
|
|
);
|
|
let type;
|
|
if (angles.some((angle) => Math.abs(angle - 90) < 0.000001)) {
|
|
type = "直角三角形";
|
|
} else if (angles.some((angle) => angle > 90)) {
|
|
type = "钝角三角形";
|
|
} else {
|
|
type = "锐角三角形";
|
|
}
|
|
|
|
return {
|
|
area, // 面积
|
|
perimeter: a + b + c, // 周长
|
|
angles: {
|
|
// 三个角的度数
|
|
A: angles[0],
|
|
B: angles[1],
|
|
C: angles[2],
|
|
},
|
|
type, // 三角形类型
|
|
inradius: area / s, // 内切圆半径
|
|
circumradius: (a * b * c) / (4 * area), // 外接圆半径
|
|
};
|
|
}
|
|
|
|
module.exports = {
|
|
circle,
|
|
rectangle,
|
|
triangle,
|
|
};
|