- 浏览: 183592 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
Brooke:
啥时候分享一下源码呗 学习一下
基于eclipse RCP的文件夹管理工具 -
红耳飞鹏:
貌似懂了之后才能看的懂,个人看法
刷新 javaFX2.0 数据视图(TableView/ListView/TreeView) -
leaow567:
这个要支持啊
基于eclipse RCP的文件夹管理工具--FileTools -
yunchow:
luoyu-ds 写道我是来看博主的头像的+1
eclipse RCP 模仿win7资源管理器地址栏功能 -
luoyu-ds:
我是来看博主的头像的
eclipse RCP 模仿win7资源管理器地址栏功能
综述
周易是中国传统文化的基石. 涵盖了包括哲学在内的多个学科. 对于周易的理解, 可谓见仁见智. 在最近一个项目中需要使用农历, 并进行简单的五行关系比较. 我上网找了一下, 这方面的资料很多, 道理也不复杂, 但是真正可以使用的类库却完全没有. 所以我打算把自己建立的类库共享出来, 使其他人不需要做相同的重复劳动.
本人并非专门研究周易, 甚至还算不上易学爱好者. 只是在日常生活中偶有接触, 感概于其精妙. 本系列文章与周易等哲学和无直接关系, 这里只是粗浅地使用计算机语言(Java)来对周易中一些概念进行建模, 以其能复用于不同项目中.
太极
周易之中, 万象均始于太极(道生一,一生万物). 故先定义接口太极(Taiji). 由于万象均有其名称及其它属性, 为了便于计算机理解, 这里为万物定义一个值(value)属性,该属性是万物在特定领域的一个特征值. 另外再定义一个属性(name)用于表示对象的标识, 使得人可以易于理解计算机所表达.
/** * <B>Taiji</B> * 太极.万象均循此道. * */ public interface Taiji { public String getName(); public int getValue(); }
/** * <B>AbstractTaiji</B> * 太极的抽象实现*/ public abstract class AbstractTaiji implements Taiji { protected int value; protected String name; protected AbstractTaiji(int value,String name) { this.value = value; this.name = name; } @Override public String getName(){ return name; } @Override public int getValue(){ return value; } @Override public String toString() { return name; } @Override public boolean equals(Object other) { if (other == null) { return false; } if (other instanceof AbstractTaiji) { return ((AbstractTaiji) other).value == value; } return false; } @Override public int hashCode() { return ((Integer)value).hashCode(); } }
易有太极,是生两仪. 有了太极,接下来就要定义两仪.两仪也就是阴阳, <<素问>>曰:" 阴阳者,天地之道也,万物之纲纪,变化之父母". 两仪变化生四象. 四象由两仪变化而来, 为了方便, 这里直接定义四象, 而不单独定义两仪.
/** * <B>FourQuadrant</B> * 四象 */ public class FourQuadrant extends AbstractTaiji{ /** 少阳 */ public static final int SHAO_YANG = 0; /** 少阴*/ public static final int SHAO_YIN = 1; /** 太阳 */ public static final int TAI_YANG = 2; /** 太阴 */ public static final int TAI_YIN = 3; private static final String[] QUADRANT_NAMES=new String[]{ LiuyaoStringSymbol.FourQuadrant_SHAO_YANG, LiuyaoStringSymbol.FourQuadrant_SHAO_YIN, LiuyaoStringSymbol.FourQuadrant_TAI_YANG, LiuyaoStringSymbol.FourQuadrant_TAI_YIN }; public static FourQuadrant getFourQuadrant(int value) { return create(value); } public static FourQuadrant[] getFourQuadrant() { FourQuadrant[] fourQuadrants=new FourQuadrant[4]; for(int i=0;i<4;i++){ fourQuadrants[i] =create(i); } return fourQuadrants; } private static FourQuadrant create(int value) { return new FourQuadrant(value, QUADRANT_NAMES[value%4]); } private FourQuadrant(int v, String name) { super(v, name); } @Override public boolean equals(Object obj) { if (super.equals(obj) && (obj instanceof FourQuadrant)) { return true; } return false; } /** 老阳动化为少阳 */ public FourQuadrant toTwoForms() { if (value == TAI_YANG) { return getFourQuadrant(SHAO_YANG); } else if (value == TAI_YIN){ return getFourQuadrant(SHAO_YIN); } else if (value == SHAO_YANG || value == SHAO_YIN) { return this; } else { return null; } } /** 返回变爻:阳动返回少阴 */ public FourQuadrant getChanged() {//FIXME if(value ==TAI_YANG){ return getFourQuadrant(SHAO_YIN); } if (value == TAI_YIN) { return getFourQuadrant(SHAO_YANG); } return new FourQuadrant(value, name); } /** 动: 阴变阴动;阳变阳动 */ public void activate(){ changeValue(value%2+2); } private void changeValue(int newValue) { this.value=newValue; this.name = QUADRANT_NAMES[newValue]; } /** 阳转为阴,阴转为阳 */ public FourQuadrant reverse() { if(isChanged()){ throw new IllegalArgumentException(); } return getFourQuadrant((value+1)%2); } /** 是否为老阳O 老阴X */ public boolean isChanged() { return (value==TAI_YANG ||value==TAI_YIN); } }
这里为什么不定义为枚举(enum)类?
这主要考虑古人对概念的抽象性过高. 比如阴阳或后面要说的五行, 其字面意义看起来比较简单, 但在现实中,不同领域的应用却又有不同属性. 比如五行在中医里面所代表的事物和天文学甚至预测学中的意义是相差很大的. 我们知道Java的enum类不支持继承,若将这些基本属性定义为枚举类, 会带来一些重复工作. 所以为了简便起见, 这里不使用枚举类.
四象定义好了, 接下来要定义万物了. 万物都离不开道的原始属性, 却又有其自身特有的属性. 万物之间又有各种各样的联系,我们无法一一将其列举.为了简单地表示万物之间的关系, 古人将世间事物分为五种(五行),即金木水火土. 并用五行之间的相生相克的关系来解释事物之间的关系. 五行的定义和四象基本一样, 代码也几乎完全重复, 但这里又不得不将其区分出来.
/** * <B>FiveElements</B> * 五行 */ public class FiveElements extends AbstractTaiji { public static final int GOLD=0; public static final int WATER=1; public static final int WOOD=2; public static final int FIRE=3; public static final int SOIL=4; private static final String[] ELEMENTS_NAMES=new String[]{ LiuyaoStringSymbol.FIVE_ELEMENT_GOLD, LiuyaoStringSymbol.FIVE_ELEMENT_WATER, LiuyaoStringSymbol.FIVE_ELEMENT_WOOD, LiuyaoStringSymbol.FIVE_ELEMENT_FIRE, LiuyaoStringSymbol.FIVE_ELEMENT_SOIL }; public static FiveElements getElement(int value) { return create(value); } private static FiveElements create(int value) { return new FiveElements(value, ELEMENTS_NAMES[value%4]); } /** 相生 */ public static final int Generate = 1<<1; /** 相克 */ public static final int Restricte = 1<<2; private FiveElements(int v, String name) { super(v, name); } /** 生 */ public boolean isGenerate(FiveElements other) { return (value + 1) % 5 == other.value; } /** 克 */ public boolean isRestricte(FiveElements other) { return (value + 2) % 5 == other.value; } }
五行还可以再细分. 比如黄历中使用的五行和周易其它分支使用的五行有所不同, 这时可以按照自己的需要定义五行的具体类. 这里, 如果金木水火土各有其明确且不同的定义,也可以将其作为五行的子类来定义 . 如果具体的五行实现类之间又有复杂的关系, 不推荐将这些关系定义到具体的五行类里面(会使类变得臃肿且难以复用), 这里可以另外定义一个工具类来计算之间的关系. 如下图
五行子类定义示意图
下一篇 天干与地支
评论
我同意你的说法, 但是这和你所说的"我想你大概没有明白五行的意思"有什么关系呢? 是我哪里理解错误了? 还是其它原因?
/** 少阴*/
public static final int SHAO_YIN = 1;
/** 太阳 */
public static final int TAI_YANG = 2;
/** 太阴 */
public static final int TAI_YIN = 3;
这个定义不太好,我想想看有什么好一点的。
我也发觉这里有问题, 但是不知道如何改进
/** 少阴*/
public static final int SHAO_YIN = 1;
/** 太阳 */
public static final int TAI_YANG = 2;
/** 太阴 */
public static final int TAI_YIN = 3;
这个定义不太好,我想想看有什么好一点的。
发表评论
-
eclipse RCP 模仿win7资源管理器地址栏功能
2013-04-23 15:25 3025本文实现效果及其工具下载地址:http://sourcef ... -
基于eclipse RCP的文件夹管理工具
2012-07-14 00:45 3371总的来说, Windows7的文件夹浏览器已经提供了很好 ... -
基于eclipse RCP的文件夹管理工具
2012-07-13 23:36 4闲来无事, 做个文件夹浏览器玩玩----基于eclipse R ... -
基于eclipse RCP的文件夹管理工具
2012-07-13 23:34 3闲来无事, 做个文件夹浏览器玩玩 -
基于eclipse RCP的文件夹管理工具
2012-07-13 23:34 3闲来无事, 做个文件夹浏览器玩玩 -
javafx2 : 支持使用微调(spinner)控制的数字的文本框(NemberTextField)
2012-02-16 13:27 6390译自: http://java.dzone.com/artic ... -
javafx2.0 初体验之 处方管理系统
2012-02-16 00:15 2782总体感觉 JFX2 应用起来比swing方便;其效果类似于f ... -
javafx2.0 修改控件默认鼠标键盘监听
2012-02-04 10:57 6637JFX为所有空间提供了默认的鼠标键盘监听,以符合一般使用 ... -
JavaFX的2.0常见问题合集
2012-02-02 13:19 2411JavaFX的2.0常见问题 1。 在JavaFX ... -
javafx2.0 监听树和表的选择变化
2012-01-13 22:47 6105Swing中的组件都有对应的选择模型(SelectionMod ... -
开源地图编辑器 mepper
2011-09-30 17:09 3090Mepper 这是我在2009年参与的项目中开 ... -
[转]AOP在大规模软件开发项目中应用的尝试与思考
2011-08-08 12:31 1514珉 李 (minli@cn ... -
单例模式和软引用[Soft Singleton Idiom]
2011-05-22 15:35 1775原文出自:http://www.javaworld.com/c ... -
【草稿 勿看】伟大的重构
2011-04-08 00:18 69一句话:进行大规模重构时,不要一下子就删掉原来的东西。先把新的 ... -
Java7异常新特性之mutilcatch
2011-03-25 14:36 2181历经4年,Java7终于和大家见面。关于Java7的新特性, ...
相关推荐
原生js图片圆形排列按钮控制3D旋转切换插件.zip
内含二维数组与三维数组,分别为list2nd,list3rd
原生js颜色随机生成9x9乘法表代码.zip
原生js实现图片叠加滚动切换代码.zip
【Academic tailor】学术小裁缝必备知识点:全局注意力机制(GAM) 注意力机制是深度学习中的重要技术,尤其在序列到序列(sequence-to-sequence)任务中广泛应用,例如机器翻译、文本摘要和问答系统等。这一机制由 Bahdanau 等人在其论文《Neural Machine Translation by Jointly Learning to Align and Translate》中首次提出。以下将详细介绍这一机制的背景、核心原理及相关公式。 全局注意力机制(Global Attention Mechanism, GAM)由 《Global Attention Mechanism: Retain Information to Enhance Channel-Spatial Interactions》提出,是一篇针对计算机视觉任务提出的方法。这篇文章聚焦于增强深度神经网络中通道和空间维度之间的交互,以提高分类任务的性能。与最早由 Bahdanau 等人提出的用于序列到序列任务的注意力机制 不同,这篇文章的重点是针对图像分类任务,并未专注于序
本项目在开发和设计过程中涉及到原理和技术有: B/S、java技术和MySQL数据库等;此文将按以下章节进行开发设计; 第一章绪论;剖析项目背景,说明研究的内容。 第二章开发技术;系统主要使用了java技术, b/s模式和myspl数据库,并对此做了介绍。 第三章系统分析;包罗了系统总体结构、对系统的性能、功能、流程图进行了分析。 第四章系统设计;对软件功能模块和数据库进行详细设计。 第五章系统总体设计;对系统管理员和用户的功能进行描述, 第六章对系统进行测试, 第七章总结心得;在论文最后结束章节总结了开发这个系统和撰写论文时候自己的总结、感想,包括致谢。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
镗夹具总工艺图
原生js树叶数字时钟代码.rar
近代非线性回归分析-韦博成1989
内容概要:本文详细介绍了用 Rust 语言实现冒泡排序算法的具体步骤,以及通过设置标志位来优化算法性能的方法。示例代码包括了函数定义、内外层循环逻辑、标志位的应用,并在主函数中展示了如何调用 bubble_sort 函数并显示排序前后的数组。 适合人群:具有基本 Rust 编程基础的学习者和开发者。 使用场景及目标:适用于想要深入了解 Rust 中冒泡排序实现方式及其优化技巧的技术人员。通过本篇文章,能够掌握 Rust 基本语法以及算法优化的基本思想。 阅读建议:除了仔细阅读和理解每一部分的内容外,还可以尝试修改代码,改变数据集大小,进一步探索冒泡排序的时间复杂度和优化效果。此外,在实际应用时也可以考虑引入并发或其他高级特性以提升性能。
培训课件 -安全隐患分类与排查治理.pptx
中国各地级市的海拔标准差数据集提供了298个地级市的海拔变异性信息。海拔标准差是衡量某地区海拔高度分布离散程度的统计指标,它通过计算各测量点海拔与平均海拔之间的差异来得出。这一数据对于评估地形起伏对网络基础设施建设的影响尤为重要,因为地形的起伏度不仅会增加建设成本,还会影响信号质量。此外,由于地形起伏度是自然地理变量,它与经济社会因素关联性较小,因此被用作“宽带中国”试点政策的工具变量,以研究网络基础设施建设对经济的影响。数据集中包含了行政区划代码、地区、所属省份、所属地域、长江经济带、经度、纬度以及海拔标准差等关键指标。这些数据来源于地理空间数据云,并以Excel和dta格式提供,方便研究者进行进一步的分析和研究。
YOLO算法的原理与实现
视网膜病变是糖尿病和高血压的主要微血管并发症。如果不及时治疗,可能会导致失明。据估计,印度三分之一的成年人患有糖尿病或高血压,他们未来患视网膜病变的风险很高。我们研究的目的是检查糖化血红蛋白 (HbA1c)、血压 (BP) 读数和脂质水平与视网膜病变的相关性。我们的主要假设是,血糖控制不佳(表现为高 HbA1c 水平、高血压和异常脂质水平)会导致视网膜病变风险增加。我们使用眼底照相机筛查了 119 名印度患者的视网膜病变,并获取了他们最近的血压、HbA1c 和血脂谱值。然后,我们应用 XGBoost 机器学习算法根据他们的实验室值预测是否存在视网膜病变。我们能够根据这些关键生物标志物高精度地预测视网膜病变。此外,使用 Shapely Additive Explanations (SHAP),我们确定了对模型最重要的两个特征,即年龄和 HbA1c。这表明血糖控制不佳的老年患者更有可能出现视网膜病变。因此,这些高风险人群可以成为早期筛查和干预计划的目标,以防止视网膜病变发展为失明。
在强化学习(RL)领域,如何稳定地优化策略是一个核心挑战。2015 年,由 John Schulman 等人提出的信赖域策略优化(Trust Region Policy Optimization, TRPO)算法为这一问题提供了优雅的解决方案。TRPO 通过限制策略更新的幅度,避免了策略更新过大导致的不稳定问题,是强化学习中经典的策略优化方法之一。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
这组数据涵盖了1999至2020年间中国各地区普通小学毕业生的数量。它为我们提供了一个深入了解中国教育领域中普通小学阶段教育水平和教育资源分配情况的窗口。通过分析这些数据,可以为制定科学合理的教育政策提供依据,同时,通过比较不同城市的普通小学毕业生数,也能为城市规划和劳动力市场调查提供参考。数据来源于中国区域统计年鉴和中国各省市统计年鉴,包含了8472个样本,以面板数据的形式呈现。这些数据对于掌握中国教育态势具有重要的参考价值。
原生js制作拖拽排列排序代码.zip
PixPin截图工具,非常好用的一款截图工具