| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- function reduceToDigit(n) {
- if (n === 11 || n === 22 || n === 33) return n
- while (n > 9) {
- let sum = 0
- const str = String(n)
- for (let i = 0; i < str.length; i++) {
- sum += parseInt(str[i], 10)
- }
- if (sum === 11 || sum === 22 || sum === 33) return sum
- n = sum
- }
- return n
- }
- const ENERGY_MAP = {
- '1': '领导力、创造、独立', '2': '合作、平衡、感性',
- '3': '表达、社交、艺术', '4': '稳定、务实、规则',
- '5': '自由、变化、冒险', '6': '关爱、责任、家庭',
- '7': '智慧、分析、内省', '8': '财富、权力、成就',
- '9': '博爱、理想、智慧', '0': '潜能、灵性、无限'
- }
- const COMBINATION_MAP = {
- '12': '创新与合作', '13': '创意表达', '14': '务实创新',
- '15': '变革领导', '16': '关怀创造', '17': '智慧创新',
- '18': '财富创造', '19': '理想创造', '21': '合作创新',
- '23': '社交表达', '24': '稳定合作', '25': '自由协作',
- '26': '关爱合作', '27': '智慧合作', '28': '财富合作',
- '31': '表达创造', '32': '社交协作', '34': '务实表达',
- '35': '自由表达', '36': '关爱表达', '37': '智慧表达',
- '38': '财富表达', '39': '理想表达', '41': '务实创新',
- '42': '稳定合作', '43': '务实社交', '45': '稳定变化',
- '46': '务实关爱', '47': '务实智慧', '48': '财富稳定',
- '51': '变革领导', '52': '自由协作', '53': '自由表达',
- '54': '变化稳定', '56': '自由关爱', '57': '智慧变化',
- '58': '自由财富', '59': '自由理想', '61': '关爱领导',
- '62': '关爱协作', '63': '情感表达', '64': '稳定关爱',
- '65': '自由关怀', '67': '智慧关怀', '68': '财富关怀',
- '71': '智慧领导', '72': '智慧协作', '73': '智慧表达',
- '74': '务实智慧', '75': '智慧变化', '76': '智慧关怀',
- '77': '深度内省', '78': '智慧财富', '79': '智慧理想',
- '81': '财富领导', '82': '财富协作', '83': '财富表达',
- '84': '务实财富', '85': '自由财富', '86': '财富关怀',
- '87': '智慧财富', '89': '财富理想', '91': '理想领导',
- '92': '理想协作', '93': '理想表达', '94': '务实理想',
- '95': '自由理想', '96': '关爱理想', '97': '智慧理想',
- '98': '财富理想'
- }
- export function getEnergy(num) {
- return ENERGY_MAP[String(num)] || '未知能量'
- }
- export function getCombination(a, b) {
- return COMBINATION_MAP[`${a}${b}`] || `${getEnergy(a)} → ${getEnergy(b)}`
- }
- /**
- * 数字能量三角图计算 - 完整30位置系统(I-X)
- * 外部位置(A-H)直接来自生日:
- * A = year[0], B = year[1], C = year[2], D = year[3]
- * E = month[0], F = month[1], G = day[0], H = day[1]
- * 内部位置(I-O):
- * I = reduceToDigit(E + F) // 月能量
- * J = reduceToDigit(G + H) // 日能量
- * K = reduceToDigit(A + B) // 年前半
- * L = reduceToDigit(C + D) // 年后半
- * M = reduceToDigit(I + J) // 青年综合数
- * N = reduceToDigit(K + L) // 晚年综合数
- * O = reduceToDigit(M + N) // 主性格
- * 外部位置(P-X)— 独立计算:
- * P = reduceToDigit(I + M)
- * Q = reduceToDigit(J + M)
- * R = reduceToDigit(P + Q)
- * S = reduceToDigit(K + N)
- * T = reduceToDigit(L + N)
- * U = reduceToDigit(S + T)
- * V = reduceToDigit(M + O)
- * W = reduceToDigit(N + O)
- * X = reduceToDigit(V + W)
- */
- export function calculateTriangle(birthYear, birthMonth, birthDay) {
- const y = String(birthYear).padStart(4, '0')
- const m = String(birthMonth).padStart(2, '0')
- const d = String(birthDay).padStart(2, '0')
- // 外部位置(A-H)- 原始数字提取
- const A = parseInt(y[0], 10)
- const B = parseInt(y[1], 10)
- const C = parseInt(y[2], 10)
- const D = parseInt(y[3], 10)
- const E = parseInt(m[0], 10)
- const F = parseInt(m[1], 10)
- const G = parseInt(d[0], 10)
- const H = parseInt(d[1], 10)
- // 内部位置(I-O)
- const I = reduceToDigit(E + F) // 月能量
- const J = reduceToDigit(G + H) // 日能量
- const K = reduceToDigit(A + B) // 年前半
- const L = reduceToDigit(C + D) // 年后半
- const M = reduceToDigit(I + J) // 青年综合数
- const N = reduceToDigit(K + L) // 晚年综合数
- const O = reduceToDigit(M + N) // 主性格
- // 外部位置(P-X)- 独立计算
- const P = reduceToDigit(I + M)
- const Q = reduceToDigit(J + M)
- const R = reduceToDigit(P + Q)
- const S = reduceToDigit(K + N)
- const T = reduceToDigit(L + N)
- const U = reduceToDigit(S + T)
- const V = reduceToDigit(M + O)
- const W = reduceToDigit(N + O)
- const X = reduceToDigit(V + W)
- return { I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X }
- }
- export function analyzeTriangle(chart) {
- const positionLabels = {
- I: '月能量', J: '日能量', K: '年前位', L: '年后位',
- M: '青年综合数', N: '晚年综合数', O: '主性格',
- P: '左侧左子', Q: '左侧右子', R: '左侧主数',
- S: '右侧左子', T: '右侧右子', U: '右侧主数',
- V: '顶部左子', W: '顶部右子', X: '顶部主数'
- }
- const zones = [
- { name: '主性格区', positions: ['O'] },
- { name: '左区(月日能量)', positions: ['I', 'J', 'M'] },
- { name: '右区(年份能量)', positions: ['K', 'L', 'N'] },
- { name: '父源区', positions: ['I', 'M'] },
- { name: '母源区', positions: ['L', 'N'] },
- { name: '全三角', positions: ['I', 'J', 'K', 'L', 'M', 'N', 'O'] },
- { name: '左侧外部组', positions: ['P', 'Q', 'R'] },
- { name: '右侧外部组', positions: ['S', 'T', 'U'] },
- { name: '顶部外部组', positions: ['V', 'W', 'X'] }
- ]
- const zoneAnalyses = zones.map(zone => ({
- zoneName: zone.name,
- numbers: zone.positions.map(pos => ({
- position: pos,
- number: chart[pos] || 0,
- label: positionLabels[pos] || pos
- }))
- }))
- const allPositions = ['I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X']
- const primary = allPositions.map(pos => ({
- position: pos,
- number: chart[pos] || 0,
- energy: getEnergy(chart[pos] || 0),
- label: positionLabels[pos] || ''
- }))
- const comboPairs = [
- ['I', 'J'], ['K', 'L'], ['M', 'N'],
- ['I', 'K'], ['J', 'L'], ['I', 'M'], ['K', 'N'],
- ['M', 'O'], ['N', 'O'],
- ['P', 'Q'], ['S', 'T'], ['V', 'W'],
- ['P', 'R'], ['Q', 'R'], ['S', 'U'], ['T', 'U'], ['V', 'X'], ['W', 'X']
- ]
- const combinations = comboPairs.map(([p1, p2]) => ({
- pair: `${p1}${p2}`,
- meaning: getCombination(chart[p1] || 0, chart[p2] || 0)
- }))
- return { primary, combinations, zoneAnalyses }
- }
|