# 24山向方位计算(基于三合罗盘)
# 输出:给定度数对应的山向名称
MOUNTAINS = [
"壬", "子", "癸", "丑", "艮", "寅",
"甲", "卯", "乙", "辰", "巽", "巳",
"丙", "午", "丁", "未", "坤", "申",
"庚", "酉", "辛", "戌", "乾", "亥"
]
def degree_to_mountain(deg: float) -> str:
"""将 0-360 度转换为 24 山向(每山 15 度)"""
deg = deg % 360
index = int((deg + 7.5) // 15) % 24 # 7.5 度偏移使子山中心在 0°
return MOUNTAINS[index]
# 示例
print(degree_to_mountain(0)) # 子(正北)
print(degree_to_mountain(180)) # 午(正南)
print(degree_to_mountain(45)) # 艮(东北)
// 浏览器端 24 山向计算(无依赖,可直接在控制台运行)
const MOUNTAINS = [
"壬", "子", "癸", "丑", "艮", "寅",
"甲", "卯", "乙", "辰", "巽", "巳",
"丙", "午", "丁", "未", "坤", "申",
"庚", "酉", "辛", "戌", "乾", "亥"
];
function degreeToMountain(deg) {
// 归一化到 0-360,偏移 7.5° 使子山中心对应 0°
const normalized = ((deg % 360) + 360) % 360;
const index = Math.floor((normalized + 7.5) / 15) % 24;
return MOUNTAINS[index];
}
// 示例
console.log(degreeToMountain(0)); // "子"
console.log(degreeToMountain(90)); // "卯"
console.log(degreeToMountain(315)); // "乾"
package main
import "fmt"
var mountains = [24]string{
"壬", "子", "癸", "丑", "艮", "寅",
"甲", "卯", "乙", "辰", "巽", "巳",
"丙", "午", "丁", "未", "坤", "申",
"庚", "酉", "辛", "戌", "乾", "亥",
}
func degreeToMountain(deg float64) string {
// 归一化到 [0, 360),偏移 7.5° 使子山中心在 0°
normalized := deg - float64(int(deg/360))*360
if normalized < 0 {
normalized += 360
}
index := int((normalized+7.5)/15) % 24
return mountains[index]
}
func main() {
fmt.Println(degreeToMountain(0)) // 子
fmt.Println(degreeToMountain(180)) // 午
fmt.Println(degreeToMountain(270)) // 酉
}
// TypeScript 版本,带类型标注
const MOUNTAINS: readonly string[] = [
"壬", "子", "癸", "丑", "艮", "寅",
"甲", "卯", "乙", "辰", "巽", "巳",
"丙", "午", "丁", "未", "坤", "申",
"庚", "酉", "辛", "戌", "乾", "亥"
];
function degreeToMountain(deg: number): string {
const normalized = ((deg % 360) + 360) % 360;
const index = Math.floor((normalized + 7.5) / 15) % 24;
return MOUNTAINS[index];
}
// 示例
console.log(degreeToMountain(0)); // "子"
console.log(degreeToMountain(45)); // "艮"
console.log(degreeToMountain(135)); // "午"
fn degree_to_mountain(deg: f64) -> &'static str {
const MOUNTAINS: [&str; 24] = [
"壬", "子", "癸", "丑", "艮", "寅",
"甲", "卯", "乙", "辰", "巽", "巳",
"丙", "午", "丁", "未", "坤", "申",
"庚", "酉", "辛", "戌", "乾", "亥",
];
let normalized = deg.rem_euclid(360.0);
let index = ((normalized + 7.5) / 15.0) as usize % 24;
MOUNTAINS[index]
}
fn main() {
println!("{}", degree_to_mountain(0.0)); // 子
println!("{}", degree_to_mountain(180.0)); // 午
println!("{}", degree_to_mountain(90.0)); // 卯
}
#!/bin/bash
# 24 山向计算(bash 版,用于脚本集成)
mountains=("壬" "子" "癸" "丑" "艮" "寅" "甲" "卯" "乙" "辰" "巽" "巳" "丙" "午" "丁" "未" "坤" "申" "庚" "酉" "辛" "戌" "乾" "亥")
degree_to_mountain() {
local deg=$1
# 归一化到 [0, 360),偏移 7.5°
local normalized=$(echo "$deg % 360" | bc)
local index=$(echo "($normalized + 7.5) / 15 % 24" | bc)
index=${index%.*} # 取整数部分
echo "${mountains[$index]}"
}
# 示例
degree_to_mountain 0 # 子
degree_to_mountain 180 # 午
degree_to_mountain 270 # 酉