西汉伏波将军路博德

路博德西河平州(今山西离石)人,生卒年不可考,曾任右北平太守,右北平不是一个普通的郡县,“飞将军”李广就曾经在这里担任过太守,而右北平郡治在平刚县平刚城(治今内蒙古宁城县西南),是大汉帝国与匈奴交战的前线。路博德为西汉武帝时期重要将领,于元狩四年汇合骠骑将军霍去病,大败北匈奴,立下赫赫战功,被刘彻下诏封为符离侯。

到了元鼎四年,也就是公元前113年,南越王婴齐薨,太子兴代立。

汉武帝元鼎五年(公元前112年),南越王相吕嘉发动叛乱,杀害汉朝使节和南越王赵兴及王太后,武帝任命路博德为伏波将军、杨仆为楼船将军,南越人听说是路博德过来征讨纷纷投降,而路博德则继续派人追捕直至砍下了吕嘉的头颅。

也是在伏波将军南下肃清残敌的时候在岭南地区设立了珠崖、儋耳两郡,路博德不仅有足够的武勇,还足智多谋,他进攻海南岛后,为了安定人心,将一些战船焚掉,表示平息叛乱后,将不再用兵,百姓可安居乐业,这也是他“兵不血刃,而定全粤”的一个缩影。

后来路博德后因犯法夺取爵位,改任强弩都尉,余生都屯守在居延,替大汉镇守边疆。

AutoCAD 函数系列之二

Private Function GetAngle(ByRef APoint() As Double, ByRef BPoint() As Double) As Double ‘X – Y 坐标系内 ① ② 两点连线的角度
Dim XDiff, YDiff As Double
XDiff = BPoint(0) – APoint(0)
YDiff = BPoint(1) – APoint(1)
Dim dTemp As Double
‘①––––②
If XDiff > 0 And YDiff = 0 Then ‘X 轴右段
GetAngle = 0 ‘弧度
End If
‘––––②
‘–––/
‘––/
‘–/
‘①
If XDiff > 0 And YDiff > 0 Then ‘第一象限
dTemp = YDiff / XDiff
GetAngle = Atn(dTemp) ‘弧度
End If
‘②
‘|
‘|
‘|
‘①
If XDiff = 0 And YDiff > 0 Then ‘Y 轴上段
GetAngle = 0.5 * PI ‘弧度
End If
‘②
‘–\
‘––\
‘–––\
‘––––①
If XDiff < 0 And YDiff > 0 Then ‘第二象限
dTemp = Abs(XDiff) / YDiff
GetAngle = 0.5 * PI + Atn(dTemp) ‘弧度
End If
‘②––––①
If XDiff < 0 And YDiff = 0 Then ‘X 轴左段 GetAngle = 1 * PI ‘弧度 End If ‘––––① ‘–––/ ‘––/ ‘–/ ‘② If XDiff < 0 And YDiff < 0 Then ‘第三象限 dTemp = Abs(YDiff) / Abs(XDiff) GetAngle = 1 * PI + Atn(dTemp) ‘弧度 End If ‘① ‘| ‘| ‘| ‘② If XDiff = 0 And YDiff < 0 Then ‘Y 轴下段 GetAngle = 1.5 * PI ‘弧度 End If ‘① ‘–\ ‘––\ ‘–––\ ‘––––② If XDiff > 0 And YDiff < 0 Then ‘第四象限
dTemp = XDiff / Abs(YDiff)
GetAngle = 1.5 * PI + Atn(dTemp) ‘弧度
End If
‘①×②
If XDiff = 0 And YDiff = 0 Then ‘原点
GetAngle = 0 ‘弧度
End If
End Function

Private Function GetDistance(ByRef APoint() As Double, ByRef BPoint() As Double) As Double ‘数组做参数, 两点的矢量距离
‘获得从 APoint 至 BPoint 的有方向距离,从西到东的扇形面积内为正(边界定义如下,正北到正南为负,正南到正北为正)
GetDistance = (BPoint(0) – APoint(0)) ^ 2 + (BPoint(1) – APoint(1)) ^ 2 ‘图形单位
GetDistance = Sqr(GetDistance) ‘图形单位
Dim iSign As Integer
If GetAngle(APoint, BPoint) > 0.5 * PI And GetAngle(APoint, BPoint) <= 1.5 * PI Then
iSign = -1
Else
iSign = 1
End If
GetDistance = iSign * GetDistance
End Function

Private Function GetSide(ByRef APoint() As Double, ByRef BPoint() As Double, ByRef CPoint() As Double) As String ‘数组做参数
‘判断点 CPoint 在从点 APoint 至点 BPoint 形成的有方向直线的哪一侧
Dim Vector01X As Double
Dim Vector01Y As Double
Vector01X = BPoint(0) – APoint(0)
Vector01Y = BPoint(1) – APoint(1)

Dim Vector02X As Double
Dim Vector02Y As Double
Vector02X = CPoint(0) – APoint(0)
Vector02Y = CPoint(1) – APoint(1)
Select Case Vector01X * Vector02Y – Vector02X * Vector01Y
Case 0
GetSide = “ABOVE”
Case Is > 0
GetSide = “LEFT”
Case Is < 0
GetSide = “RIGHT”
End Select
End Function

Private Function GetPosition(ByRef APoint() As Double, ByRef BPoint() As Double, ByRef CPoint() As Double) As String ‘数组做参数
‘判断点 CPoint 在从点 APoint 至点 BPoint 形成的有方向直线的哪一段,三点不共线 返回 -1
GetPosition = “-1”
If Not GetSide(APoint, BPoint, CPoint) = “ABOVE” Then Exit Function
If GetDistance(APoint, BPoint) >= 0 And GetDistance(APoint, CPoint) >= 0 Then
If GetDistance(APoint, BPoint) >= GetDistance(APoint, CPoint) Then
GetPosition = “INSIDE”
Else
GetPosition = “FRONT”
End If
End If
If GetDistance(APoint, BPoint) < 0 And GetDistance(APoint, CPoint) < 0 Then If GetDistance(APoint, BPoint) < GetDistance(APoint, CPoint) Then GetPosition = “INSIDE” Else GetPosition = “FRONT” End If End If If GetDistance(APoint, BPoint) >= 0 And GetDistance(APoint, CPoint) < 0 Then GetPosition = “REAR” End If If GetDistance(APoint, BPoint) < 0 And GetDistance(APoint, CPoint) >= 0 Then
GetPosition = “REAR”
End If
End Function

三维迷宫(3DMaze)

一、介绍
支持大多数的操作系统,自动生成并解决迷宫,
迷宫以三维的形式呈现。
二、菜单
选择“新局”将开启新的迷宫;
选择“提示”将给出当前迷宫的解决方案;
选择“清除”将清除提示痕迹或解决痕迹。
三、规格与风格
调整窗口大小将会呈现一个新的迷宫,最小化除外;
窗口越大,迷宫里的房间就越多;
房间可以有“六边形”和“正方形”两种风格。
四、操作提示:
右侧滚动条则用于更改迷宫的倾斜度;
选择正方形的风格后,可以使用小键盘的方向键操控;
选择六边形的风格后,可以使用 Home、↑、PgUp、End、↓、PgDn 操控;
窗口中的移动方向与基于小键盘上“5”的方向相一致;
走出迷宫后,上下箭头将用于控制右侧滚动条。

下载见软件下载

溪州之战

在今天的湖南省湘西土家族苗族自治州,永顺县王村芙蓉镇的“湘西民俗风光馆”内,陈列着 溪州铜柱,被国务院1961年列为国家第一批重点保护文物。

溪州铜柱,是五代十国时期楚国第三任楚王马希范与武陵五溪土司彭士愁盟誓为约所立。溪州铜柱高约4米,直径约40厘米,重约5000斤,铜柱铭文2619个字,均是楷体字,字体秀丽。

马希范(899年-947年),字宝规,马殷的第四子,932年楚国第三任楚王。彭士愁(903年-956年),生于江西吉水,长于湘西,938年承袭父职任溪州刺史。

相传彭士愁的父亲彭瑊(读jian间)、伯父彭玕(读gan甘)在唐末黄巢起义时组织乡兵自保,逐渐成为割据江西吉州的地方军阀。五代十国时期,受不了吴国的压迫而向西投奔楚国。彭氏兄弟入楚后,得到楚王马殷的器重,分别委以重任。

马殷还为儿子马希范自小定下彭玕之女为妻,青梅竹马。马希范继任楚王后,封妻子为顺贤夫人。顺贤夫人相貌不美,但是治家有道,马希范有点惧怕她。

公元910年,楚王马殷任命彭瑊担任溪州刺史,经营湘西。923年,马殷任命彭瑊为靖边都指挥使兼任溪州刺史,统领武陵五溪地区。938年,彭瑊去世,彭士愁继承父位,担任溪州刺史。彭士愁得到五溪诸蛮的拥护,势力雄厚,在今湖南湘西(包括湖北来凤、咸丰、宣恩,重庆东部,贵州东北部),建立起一个强大的少数民族地区的割据政权。

公元932年,马希范继位楚王,之后,对溪州增加赋税,引起彭士愁的不满。这种矛盾在顺贤夫人在世时还可以调解缓和。然而到938年12月,顺贤夫人去世后,彭士愁与马希范的矛盾便开始激化,针尖对着麦芒。

公元939年8月,彭士愁发动溪、锦、将三州万余蛮人,侵犯楚国辰州、灃州(今怀化沅陵和常德灃县)。9月,楚王马希范命令左静江指挥使刘勍、决胜指挥使廖匡齐,领兵五千讨伐,溪州之战爆发。11月,彭士愁兵败,逃入深山。楚军追至溪州,彭士愁撤出溪州都城,即永顺县老司城,退据山寨,依靠四面悬崖绝壁作天险,抵抗楚兵。

廖匡齐带兵架梯往山寨攻击,寨内射出弓箭,箭如雨下,楚兵败退,廖匡齐战死。不久,刘勍再次组织进攻,并截断彭士愁的水源和粮道。有一天趁着大风,刘勍命令楚军用火箭射入山寨,寨内的茅草房和木质防御栅栏全部被烧毁,士兵死伤惨重。彭士愁乘黑夜率兵冲下山,向锦州、奖州的深山撤退。

之后不久,彭士愁派他的次子彭师暠(读hao号),带领各山寨酋长和头领,向楚国请降,表示一心归顺,湘西各民愿意服从楚国。双方谈判之后,缔结盟约,同意在酉水河畔会溪坪铸立铜柱。

公元940年初,马希范仿照先祖伏波将军马援“平征侧于龙编,树铜柱于象浦”,与彭士愁盟誓立铜柱为约,化干戈为玉帛,把战争的原因、经过、议和的条款,都清楚明白地刻在铜柱上。

一来,表明楚国对少数民族的羁縻笼络政策原则: 古者叛而伐之,服而柔之,不夺其财,不贪其土。前王典故,后代蓍龟(读shigui时归,借鉴的意思)。吾伐叛怀柔,敢无师古;夺财贪地,实所不为。

楚王马希范承诺: 尔能恭顺,我无科徭,本州赋租,自为供赡,本土兵士,亦不抽差。永无金戈之虞,克保耕桑之业。任命彭士愁仍然担任溪州刺史(土司),可以世袭。

二来,用立铜柱的铭物方式,让这项政策 不因王权更替而废止。铜柱立在辰州会溪城西南一里处,是双方盟誓为约、立柱为信的证物;当然,也是界碑,马希范与彭士愁划江而治,酉水之南归马希范,酉水之北归彭士愁。

自此以后,经历五代十国、宋、元、明、清等朝代,马希范与彭士愁达成的五溪治理模式,被历朝历代继承。公元960年,赵匡胤建立宋朝,沿袭五溪治理模式。

公元1271年,忽必烈建立元朝,完善五溪治理模式,将土司纳入国家统一职官体系,成为王朝统辖地方的行政官员,正式建立中国土司制度。

公元1368年,朱元璋建立明朝,沿袭土司制度治理中国西南地区。公元1636年,皇太极建立清朝, 沿袭土司制度。公元1728年,清朝雍正六年,“改土归流”,土司制度终止。

彭氏在湘西的土司政权,从910年彭瑊任溪州刺史时算起,到1728年清朝“改土归流”时终止,长达八百一十八年。封闭自守的溪州彭氏土司,依仗着溪州铜柱的铭文保护,偏安一隅,造福一方,连续承袭二十八代。溪州各族人民也得享800多年没有边患战乱的相对安定的生活。彭士愁被土家人视为土司王神和祖先神之一。

在武陵五溪地区,称呼汉族为“客家”。马楚时期,各民族之间关系融洽。苗族马姓, 苗语叫“khuat rangs夸然。“khuat夸”是“客”,“rangs然”是“龙”,“khuat rangs夸然”就是 客家之龙

在中华文化中,龙是王、是皇帝。在五代十国时期的湖南,谁是王、是皇帝呢?马殷、马希范就是。

中国姓马的人很多,苗族也有很多人姓马,如果你听到一个苗族人告诉你说,他姓马,苗语是“khuat rangs夸然”,那 多半与五代十国的马氏楚国有关,是同一家人,是同一种骏马。马姓苗族称为“khuat rangs夸然”,就是这样来的。

拖动窗体

Option Explicit
Private Declare Function GetCursorPos Lib “user32” (lpPoint As POINTAPI) As Long
Private Type POINTAPI
X As Long
Y As Long
End Type
Dim bMoveForm As Boolean, LastPoint As POINTAPI

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim POINT As POINTAPI
GetCursorPos POINT
LastPoint.X = POINT.X
LastPoint.Y = POINT.Y
bMoveForm = True
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim iDX As Long, iDY As Long
Dim iTPPX As Long, iTPPY As Long
iTPPX& = Screen.TwipsPerPixelX
iTPPY& = Screen.TwipsPerPixelY
Dim POINT As POINTAPI
If Not bMoveForm Then Exit Sub
GetCursorPos POINT
iDX& = (POINT.X – LastPoint.X) * iTPPX&
iDY& = (POINT.Y – LastPoint.Y) * iTPPY&
LastPoint.X = POINT.X
LastPoint.Y = POINT.Y
Me.Move Me.Left + iDX&, Me.Top + iDY&
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
bMoveForm = False
End Sub