iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0

目標:製作一個人類圖模組
輸入:生日日期時間
輸出:一 2x13(共 26 個數字)的人類圖矩陣

新增模組

nest g module body-graph

初始化 SwissEph

呼叫 swisseph 提供的 swe_set_ephe_path() 函數,參數可替換為其他星曆的資料檔路徑,例如 JPL。

// body-graph.module.ts

@Module({})
export class BodyGraphModule implements OnModuleInit {
  public onModuleInit(): void {
    swe_set_ephe_path('');
  }
}

新增命令:生成人類圖

雖然從生辰時間,到計算出星球角度的矩陣,這之間的過程都是同步的運算。這邊還是利用 CQRS 的 Command Pattern 編寫邏輯,目的是這個命令未來可能會將結果寫入資料庫,只是目前還沒有這樣的實作。

參數目前只有一個——出生時間,未來可能還會有使用者的相關資訊,以便一起寫入資料庫。

export class GenerateBodyGraphCommand implements ICommand {
  public constructor(public readonly birth: IDateTime) {}
}

資料結構

人類圖分成兩組數據,原文用 imprint 這個字,翻作「銘刻」、「版本說明」,分別為:個性(Personality)和設計(Design)。

個性是出生當下,天球上 13 顆星體的角度位置;設計是出生當下的太陽角度往前推算 88 度時,天球上 13 顆星體的角度位置。

13 顆星體分別為太陽、地球、月亮、北交點、南交點、水星、金星、火星、木星、土星、天王星、海王星和冥王星。

每顆星體的角度透過座標系轉換,可以對應到易經六十四卦的座標系。這個演算法會得到一組子結構(Substructure),目前只需用到閘門(gate)和爻線(line)。

我們可以 TypeScript interface 將所需的資結定義如下:

export interface ISubstructure {
  gate: number;
  line: number;
}

export interface IImprint {
  sun: ISubstructure;
  earth: ISubstructure;
  moon: ISubstructure;
  northNode: ISubstructure;
  southNode: ISubstructure;
  mercury: ISubstructure;
  venus: ISubstructure;
  mars: ISubstructure;
  jupiter: ISubstructure;
  saturn: ISubstructure;
  uranus: ISubstructure;
  neptune: ISubstructure;
  pluto: ISubstructure;
}

export interface IBodyGraph {
  personality: IImprint;
  design: IImprint;
}

座標系轉換的演算法明天再做詳細的介紹。


晚安,瑪卡巴卡。


上一篇
基礎建設
下一篇
人類圖基礎:從生辰到星盤(2)
系列文
「莫忘初衷,從猴子到超人」:一個獻給自由精靈的社群媒合引擎18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言