1. 什么是奇门遁甲?
奇门遁甲?“奇门遁甲”的含义是什么呢?就是由“奇”,“门”,“遁甲”三个概念组成。“奇”就是乙,丙,丁三奇;“门”就是休,生,伤,杜,景,死,惊,开八门;“遁”是隐藏的意思,“甲”指六甲,即甲子,甲戌,甲申,甲午,甲辰,甲寅,“遁甲”是在十干中最为尊贵,它藏而不现,隐遁于六仪之下。“六仪”就是戊,己,庚,辛,壬,癸。隐遁原则是甲子同六戊,甲戌同六己,甲申同六庚,甲午同六辛,甲辰同六壬,甲寅同六癸。另外还配合蓬,任,冲,辅,英,芮,柱,心,禽九星。奇门遁的占测主要分为天,门,地三盘,象征三才。天盘的九宫有九星,中盘的八宫(中宫寄二宫)布八门,地盘的八宫代表八个方位,静止不动,同时天盘地盘上,每宫都分配着特定的奇(乙,丙,丁)仪(戊,己,庚,辛,壬,癸六仪)。这样,根据具体时日,以六仪,三奇,八门,九星排局,以占测事物关系,性状,动向,迭择吉时吉方,就构成了中国神秘文化中一个特有的门类----奇门遁甲。
2. 奇门遁甲的作用?
奇门遁甲最早用于兵法,现代主要表现为预测领域,包含了生活中的方方面面,
哎呀 太多了 我就不说了(懒)懂得都懂,不懂得自行百度了解,直接上代码吧!!!
确认时间-(当前时间,四柱,节气)
/**
* 了解奇门的朋友 都知道奇门分阴盾阳盾局(过了夏至用阴盾 过了冬至用阳盾)
* new OneyJeiQi("确认该节气用阴盾还是阳盾","节气本身", 上元, 中元, 下元)
*/
package com.qimen.qiju.jieqi;
import java.util.ArrayList;
import java.util.List;
public class Static {
private static List<OneyJeiQi> list=new ArrayList<OneyJeiQi>();
static {
//阳盾
list.add(new OneyJeiQi("阳","冬至", 1, 7, 4));
list.add(new OneyJeiQi("阳","小寒", 2, 8, 8));
list.add(new OneyJeiQi("阳","大寒", 3, 9, 6));
list.add(new OneyJeiQi("阳","立春", 8, 5, 2));
list.add(new OneyJeiQi("阳","雨水", 9, 6, 3));
list.add(new OneyJeiQi("阳","惊蛰", 1, 7, 4));
list.add(new OneyJeiQi("阳","春分", 3, 9, 6));
list.add(new OneyJeiQi("阳","清明", 4, 1, 7));
list.add(new OneyJeiQi("阳","谷雨", 5, 2, 8));
list.add(new OneyJeiQi("阳","立夏", 4, 1, 7));
list.add(new OneyJeiQi("阳","小满", 5, 2, 8));
list.add(new OneyJeiQi("阳","芒种", 6, 3, 9));
//阴盾
list.add(new OneyJeiQi("阴","夏至", 9, 3, 6));
list.add(new OneyJeiQi("阴","小暑", 8, 2, 5));
list.add(new OneyJeiQi("阴","大暑", 7, 1, 4));
list.add(new OneyJeiQi("阴","立秋", 2, 5, 8));
list.add(new OneyJeiQi("阴","处暑", 1, 4, 7));
list.add(new OneyJeiQi("阴","白露", 9, 3, 6));
list.add(new OneyJeiQi("阴","秋分", 7, 1, 4));
list.add(new OneyJeiQi("阴","寒露", 6, 9, 3));
list.add(new OneyJeiQi("阴","霜降", 5, 8, 2));
list.add(new OneyJeiQi("阴","立冬", 6, 9, 3));
list.add(new OneyJeiQi("阴","小雪", 5, 8, 2));
list.add(new OneyJeiQi("阴","大雪", 4, 7, 1));
}
public static OneyJeiQi get(String name) {
for (int i = 0; i < list.size(); i++) {
if(name.equals(list.get(i).getName())) {
return list.get(i);
}
}
return null;
}
}
根据当前时间获取该用那个节气信息
package com.qimen.qiju.jieqi;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 计算公式:[Y*D+C]-L
*
* @author
*
*/
public class SolarTerm {
/**
* 节气D值
*/
private static final double D = 0.2422;
/**
* 20世纪的节气C值
*/
private static final double[] C_20 = { 6.11, 20.84, 4.6295, 19.4599, 6.3826, 21.4155, 5.59, 20.888, 6.318, 21.86,
6.5, 22.2, 7.928, 23.65, 8.35, 23.95, 8.44, 23.822, 9.098, 24.218, 8.218, 23.08, 7.9, 22.6 };
/**
* 21世纪的节气C值
*/
private static final double[] C_21 = { 5.4055, 20.12, 3.87, 18.73, 5.63, 20.646, 4.81, 20.1, 5.52, 21.04, 5.678,
21.37, 7.108, 22.83, 7.5, 23.13, 7.646, 23.042, 8.318, 23.438, 7.438, 22.36, 7.18, 21.94 };
/**
* 24节气
*/
private static final String[] TERM = { "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑",
"大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" };
/**
* 节气缓存表
*/
private static Map<Integer, Map<String, String>> termMap = new HashMap<Integer, Map<String, String>>();
public static int getNum(int month, int date) {
String str="";
if(month<10) {
str="0"+month;
}else {
str=month+"";
}
if(date<10) {
str=str+"0"+date;
}else {
str=str+date+"";
}
return Integer.parseInt(str);
}
/**
* 获取指定日期节气名称
*
* @param year
* @param month
* @param date
* @return
*/
public static JieQI getTermName(int year, int month, int date) {
List<JieQI> list=new ArrayList<JieQI>();
Map<String, String> map = getYearTermMap(year);
for (Map.Entry<String, String> entry : map.entrySet()) {
String key= entry.getKey();
JieQI jq=new JieQI();
jq.setIndex(Integer.parseInt(key));
jq.setData(year+"-"+entry.getKey().substring(0, 2)+"-"+entry.getKey().substring(2, 4)+" 00:00:00");
jq.setName(entry.getValue());
list.add(jq);
}
Collections.sort(list);
int mynum=getNum(month, date);
for (int i = 0; i < list.size(); i++) {
if(mynum>=list.get(i).getIndex()) {
return list.get(i);
}
}
JieQI jq=new JieQI();
jq.setName("冬至");
return jq;
}
/**
* 获取指定年份萨拉表
*
* @param year
* @return
*/
public static Map<String, String> getYearTermMap(int year) {
// 处理世纪C值
double[] c = null;
if (year > 1900 && year <= 2000) {
c = C_20;
} else if (year > 2000 && year <= 2100) {
c = C_21;
} else {
throw new RuntimeException("不支持的年份:" + year + ",目前只支持1901年到2100年的时间范围");
}
// 从节气表中取
Map<String, String> map = termMap.get(year);
if (map != null) {
return map;
}
// 节气表中无对应的节气数据,则计算生成
synchronized (TERM) {
map = termMap.get(year);
if (map == null) {
int y = year % 100;
map = new HashMap<String, String>();
for (int k = 0; k < 24; k++) {
// 计算节气日期,计算公式:[Y*D+C]-L
int date = 0;
if (k < 2 || k > 22) {
date = (int) (y * D + c[k]) - (int) ((y - 1) / 4);
} else {
date = (int) (y * D + c[k]) - (int) (y / 4);
}
// 记录计算结果
map.put(getTermKey(k / 2 + 1, date), TERM[k]);
}
// 计算结果添加到节气表
termMap.put(year, map);
}
}
return map;
}
/**
* 组装节气存储key
*
* @param month
* @param date
* @return
*/
private static String getTermKey(int month, int date) {
String key = String.valueOf(month);
if (month < 10) {
key = "0" + key;
}
if (date < 10) {
key += "0";
}
key += date;
return key;
}
public static void main(String[] args) {
System.out.println(Static.get(getTermName(2020, 8, 3).getName()).getYinyang());
}
}
节气确认好了 该初始化九宫信息啦
package com.qimen.qiju.jiugong;
import java.util.HashMap;
import java.util.Map;
import com.qimen.qiju.dizhi.DiZhi;
import com.qimen.qiju.jiuxing.JiuXingUtil;
public class JiuGongUtil {
private static String key="jiugong_index_";
public static Map<String, JiuGong> getJiuGong(DiZhi month){
//初始化九宫基本信息
Map<String, JiuGong> map=new HashMap<String, JiuGong>();
map.put(key+"1", new JiuGong(1, "水", "坎","北方", JiuXingUtil.get(month, "天蓬")));
map.put(key+"2", new JiuGong(2, "土", "坤","西南方", JiuXingUtil.get(month, "天芮")));
map.put(key+"3", new JiuGong(3, "木", "震","东方", JiuXingUtil.get(month, "天冲")));
map.put(key+"4", new JiuGong(4, "木", "巽"," 东南方", JiuXingUtil.get(month, "天辅")));
map.put(key+"5", new JiuGong(5, "土", "无","无", JiuXingUtil.get(month, "禽")));//奇门九宫中 中5宫为寄宫
map.put(key+"6", new JiuGong(6, "金", "乾","西北方", JiuXingUtil.get(month, "天心")));
map.put(key+"7", new JiuGong(7, "金", "兑","西方", JiuXingUtil.get(month, "天柱")));
map.put(key+"8", new JiuGong(8, "土", "艮","东北方", JiuXingUtil.get(month, "天任")));
map.put(key+"9", new JiuGong(9, "火", "离","南方", JiuXingUtil.get(month, "天英")));
return map;
}
public static JiuGong getIndex(Map<String, JiuGong> map, int index){
return map.get(key+index);
}
}
八门信息
package com.qimen.qiju.bamen;
import java.util.ArrayList;
import java.util.List;
import com.qimen.qiju.Main;
import com.qimen.qiju.jiugong.JiuGongUtil;
import com.qimen.qiju.jiuxing.JiuXingUtil;
public class BaMenUtil {
private static List<BaMen> list=new ArrayList<BaMen>();
static {
list.add(new BaMen(1, "休门", ""));
list.add(new BaMen(2, "死门", ""));
list.add(new BaMen(3, "伤门", ""));
list.add(new BaMen(4, "杜门", ""));
list.add(new BaMen(5, "无门", ""));
list.add(new BaMen(6, "开门", ""));
list.add(new BaMen(7, "惊门", ""));
list.add(new BaMen(8, "生门", ""));
list.add(new BaMen(9, "景门", ""));
}
/**
* 根据名字获取八门信息
* @param name
* @return
*/
public static BaMen getName(String name) {
for (int i = 0; i < list.size(); i++) {
if(name.equals(list.get(i).getName())) {
return list.get(i);
}
}
return null;
}
/**
* 根据宫位获取八门
* @param index
* @return
*/
public static BaMen getIndex(int index) {
for (int i = 0; i < list.size(); i++) {
if(index==list.get(i).getIndex()) {
return list.get(i);
}
}
return null;
}
/**
* 写入原始工位
* @param main
*/
public static void setOldBaMen(Main main) {
for (String key: main.getJiugong().keySet()) {
int gong= main.getJiugong().get(key).getIndex();
main.getJiugong().get(key).setOldBaMen(getIndex(gong));
}
}
public static void setNewBaMen(Main main) {
//时干减1
int gegongshu= main.getSizu().getHourGan().getIndex()-1;
//八门原始位置
int zhishinum=main.getZhishi().getIndex();
//
if(5==main.getZhifu().getIndex()) {
zhishinum=5;
}
int zhuandong=0;
if(main.getYinyang().equals("阴")) {
//阴盾
zhuandong=zhishinum;
for (int i = 1; i <= gegongshu; i++) {
zhuandong=zhuandong-1;
if(zhuandong<1) {
zhuandong=9;
}
}
}else {
//阳盾
zhuandong=zhishinum;
for (int i = 1; i <= gegongshu; i++) {
zhuandong=zhuandong+1;
if(zhuandong>=10) {
zhuandong=1;
}
}
}
//判断八门是否伏吟 中五宫位为伏吟局 //原始八门宫位==转动后的宫位 为伏吟局
if(zhuandong==zhishinum) {
for (String key:main.getJiugong().keySet()) {
main.getJiugong().get(key).setNewBaMen(main.getJiugong().get(key).getOldBaMen());
}
}else {
if(zhuandong==5) {
zhuandong=2;
}
String jgindex="18349276";
String [] jiuxingxuhao= {"休门","生门","伤门","杜门","景门","死门","惊门","开门"};
String[] index1=jgindex.substring(jgindex.indexOf(""+zhuandong), jgindex.length()).split("");
String[] index2=jgindex.substring(0, jgindex.indexOf(""+zhuandong)).split("");
int jxindex=getindexsort(jiuxingxuhao, main.getZhishi().getName());
//如果等0 就是中五宫 为 死门
if(jxindex==0) {
jxindex=6;
}
for (int i = 0; i < index1.length; i++) {
JiuGongUtil.getIndex(main.getJiugong(), Integer.parseInt(index1[i])).setNewBaMen(BaMenUtil.getName(jiuxingxuhao[jxindex-1]));;
jxindex=jxindex+1;
if(jxindex>8) {
jxindex=1;
}
}
for (int i = 0; i < index2.length; i++) {
if("".equals(index2[i])||index2[i]==null) {
continue;
}
JiuGongUtil.getIndex(main.getJiugong(), Integer.parseInt(index2[i])).setNewBaMen(BaMenUtil.getName(jiuxingxuhao[jxindex-1]));;
jxindex=jxindex+1;
if(jxindex>8) {
jxindex=1;
}
}
}
JiuGongUtil.getIndex(main.getJiugong(), 5).setNewBaMen(getIndex(5));
}
public static int getindexsort(String[] strs,String name) {
for (int i = 0; i < strs.length; i++) {
if(strs[i].equals(name)) {
return (i+1);
}
}
return 0;
}
}
//算求了 太多了 需要的话直接找我要源码吧!!!!