认识Unity引擎
对于个人而言,在游戏开发的过程中,最缺的可能就是游戏素材了,素材的获取途径是多样的,但往往我们都是在某个游戏之中发现某个想要的素材,所以游戏解包成了我们需要的技能之一,如今大部分手游的开发引擎都是Unity(对apk拆包就可以在lib下发现libunity.so)。“知己知彼,百战不殆”,所以在拆包前,我们需要从整体上认识Unity的架构,虽然Unity对免费用户并不开源,但许多类似的思想是不会改变的,不会影响我们的理解。
从开发的视角看UnityUnityHub是一个没用的玩意,不用管它,我们重点来研究UnityEditor。Unity对我来说是一个闭源项目,所以要想研究Unity,只能从官方文档和工程目录开始研究。
官方文档Unity的文档总共有两部分,用户手册和脚本API,前者是基本属于整个UnityEditor软件的操作手册,后者则是脚本开发的API查询手册,虽然其并没有告诉我们Unity的架构,但我们可以以此作为依据了解个一二。一般的游戏引擎由软件库加头文件组成,比如我们的cocos2dx,这类引擎使用起来和一般的第三方库区别不大,但这种开发方式存在开发语言的依赖性,比如跨平 ...
数学探索之数其二
分析就是无理数的“四则运算”,级数就是无理数的“表达方式”
接下来我们将研究最常见的两个无理数e和π,并证明它们的无理性和超越性。我们引出一个问题e和π的定义是什么?当你知道这一点的时候,你就会发现接下来的证明是如此的自然。
e是无理数证明:首先e的“定义”是,使用反证法,假设e是有理数,则存在整数a和b,使得,变形得
,∀n∈N
方程的右边是一个整数,而左边为
其中显然是一个整数,而对另一部分
所以当n充分大时,即超过确定的数b时,等式的左边非整数,矛盾,所以e是无理数。证毕类似的证明可以扩充到e的幂上,但比较繁琐,所以我们将介绍另一种证明e的幂是无理数的方法引理:对于某个确定的整数n≥1,令
则有(1)函数f(x)是一个多项式,且形如,其中均为整数(2)当0<x<1时,有(3)对所有的k≥0,微分取值和均是整数。上述这些性质对于确定的函数f(x)来说,是可以直接计算来证明的,所以不进行过多的赘述,我们依据这个函数的性质来完成我们的证明定理:对任意的r∈Q{0},是无理数。证明:由于有理数的整数次幂仍然是有理数,所以我们只需要对任 ...
数学探索之数其一
数学从名字上来看,就是关于“数”的学问,不过英语看不出来就是了,所以对数有一个清晰的认识是十分重要的。在这一篇中,我们要说明两个事实,实数的完备性和复数的代数封闭性,我们先回忆一下几个简单的集合记号,自然数集N、整数集Z、有理数集Q、实数集R、代数数集A、复数集C。
实数的完备性实数分为有理数和无理数,对于有理数Q的基本特点,我们的认识是十分清楚的,比如可以将Q看成一个无限的素域,Q中的数有个十分良好的特性是,所有的数都可以用自然数来有限表示,而自然数的构造又有各种公理,如皮亚诺(Peano)公理,又或者用集合基数来构造。所以实数中的难点在于无理数,从有理数到无理数的过渡。实数的构造是接下来讨论的一个重点,我们还会揭示实数的性质要通过分析的性质来表现,分析之于实数就如四则运算之于有理数。
康托尔(Cantor)的实数构造法学过分析的都知道,无限序列是最基本又最重要的概念之一,所谓序列就是自然数到实数的函数映射,因为我们还没有定义实数,所以定义有理数序列(rₙ)为自然数到有理数的映射f(n),n∈N。定义:设(rₙ)是有理数序列,如果存在有理数l,使得对任意给定的正有理数ε,都可以找到自 ...
思维导图
思维导图这玩意,我就基本没有画过,因为我知道,画了最后也只能入库吃灰,对我而言,抄抄想想就足够了。一切要求都来自外部,现实的事情是无法摆脱的,如果不是老师强迫我们画思维导图,我都不知道低质的软件还真是多啊。付费的软件真的好吗?付费存在两种机制,买断和内购,前者流行于国外,后者广泛存于国内。白嫖本身不利于软件本身的发展,会严重将软件引入歧途,内购机制什么时候进入国内的,我不太清楚,但我只记得以前并非如此,但盗版真的太难避免了,这是国内的大环境,是没有办法的。有钱人的世界,不在我们考虑定位范畴,世界上乐于分享的人还是有许多的,开源社区绝对是一个好的选择,当然前提是你愿意去折腾。要么付钱,要么付时间,没有付出就被想奢求回报。
百度脑图百度脑图,全称kityminder-editor,是一个十分远古的Web项目,不过还跑在百度的服务器上,地址
其功能比较简陋,操作也不算复杂,拿来应付作业还是足够的。我们看一下可用的导出格式
思维导图在程序界并非什么重要的东西,没有统一的格式编码标准,但又存在一定市场,所以导致了各种不同的思维导图格式。txt和md是常见的文本格式,svg是矢量图 ...
数学探索之多项式与方程其五
学了这么多抽象理论,多少感觉有些魔幻,一点实感也没有,所以在这一篇我们的目标就是消去它们。
三次方程二次方程过于简单,四次方程过于繁琐,更高次的方程没有一般解法,所以我们选取中庸,拿三次方程来试试水。
解方程一般的三次方程如下
我们先把x³-1=0的本原根添加到基域F中去,即令F含有和,令是方程的三个根,则有分裂域,由之前的分析我们有G=Gal(E/F)≌S₃。我们有可解合成群列,依据伽罗瓦对应我们得到域列,其中B=Inv(A₃),A₃≌Gal(E/B)是一个3阶循环群,B是F的一个正规扩域,E是B的一个3次循环扩域。接下来我们要寻找根式扩域所需的数。令Δ=(α₁-α₂)(α₂-α₃)(α₃-α₁),则Δ在偶置换A₃下不变,在S₃中奇置换下变为-Δ,故Δ∈B且Δ∉F,进一步有D=Δ²∈F,计算可得D=-4r³q-27q²+18rpq-4p³+r²p²。因为[F(Δ):F]=2和[B:F]=2,所以B=F(Δ)。因为α₁,α₂,α₃不能全属于B,所以不妨设α₁∉B,同上面类似的过程,我们可以得到E=B(α₁),由于α₁不能确定,所以我们采用证明的方法来构造需要的数。
...
数学探索之多项式与方程其四
在这一篇文章中,我们将向着文章的最后目标进发,由此得到一个方程运用根式可解的判定准则。
根式可解的严格定义数学是一门严谨的学科,定义都不清不楚的情况下进行证明,理论上来说是不严谨的,不过最原始的概念还是得依靠公理的。定义1:设首一多项式f(x)∈F[x],称f(x)=0在F上运用根式可解,如果存在F的某个扩域K满足以下条件:(1)K包含了f(x)在F上的分裂域E,即F⊆E⊆K。(2)K/F有如下根式塔F=F₁⊆F₂⊆…⊆Fₙ₋₁⊆Fₙ=K其中每个,,i=1,2,…,n,即是纯扩张,我们顺便把自然数集{n₁, n₂, … , nₙ₋₁, nₙ}称为此根塔的根次数集。这个定理看似十分的繁琐,但其实是在说明,运用根式可解等价于,方程可以化为xⁿ-a=0的形式。这符合我们的基本认知,加减乘除是域本身的基本运算,我们平方的逆运算来扩张基本域,这样分裂域中就只有加减乘除和开根号了,即根是由系数的四则运算和开根号组成。在定义中,我们并没有强制要求E=K,这是因为,分裂域E一定是F的正规扩域,但K是由条件(2)所定义的纯扩域,而纯扩域不一定是正规扩域。
单位根的地位在方程与纯扩张关系中,最纯粹的莫过于 ...
编程手记之Live2D
在2D动画制作上,方法是很多的,比如Adobe系列软件,但我们更专注于将动画嵌入到游戏和软件中去。采用直接播放媒体文件的方式可行,但可控程度不高,不是我想要的。目前有两种比较常用的可控动画,它们是骨骼动画和Live2D动画,对于前者有付费的Spine和免费的Dragonbones,而后者主要是从美术布线和基本变形实现的,也是我们接下来要讨论的主题。
文件形式在使用任何开发型工具时,了解相关的文件格式是十分必要的,这样有助于我们理解,文件存了什么,又能修改什么。我们使用的工具是Live2DCubism,其分为两部分Editor和Viewer,功能显而易见,软件3.0前后不兼容,所以我们讨论最新的版本。cmo3(Cubism Model 3),即Live2D模型文件,包含图像数据psd、网格数据、变形器数据、参数等。这里有必要稍微讲一下Live2D实现的基本原理,先来看一个基本的动作演示(Tampermonkey配合PicviewerCE+可以方便地看图),
也就是说Live2D动画的本质,是不同参数对应着不同的画面,当然我们不可能每一帧都有一张图片,所以我们实际使用的是补间动画,动 ...
永远地活在这里
曾经有这么一个人,他很喜欢学习,所以每当他看到有趣的课程,他就会去看看。这是他发现,可恶,课程为什么如此的长,竟然高达几个小时,没办法了,等哪天闲下来了再说吧,于是收藏了下来。过了以后,他又发现了一个类似的课程,但总觉得有些新东西在里面,可是时间很紧急,没办法只能再收藏了。不知不觉一天已经过去了,收藏夹里多了好多课程,长达上百个小时,今天过得十分“充实”。几天过后,终于空闲了下来,这两天可贵的假期一定要把握住,啊,有这么多小时的课程啊,时间有些不够呢?看来只能开启倍速了,加速学习走起。没过几分钟,哎呀,怎么这么慢啊,啰啰嗦嗦地讲这么多,就为了这么简单的东西,跳过跳过。两天过去了,所有课程都“学完了”,学习的日子真实充实啊!今天又看到了几天前学过的课程,随手翻了翻目录,说起来这个东西是干什么的来着,嗯嗯,确实有这个东西,但好像有点想不起来了,算了算了,收藏收藏。嘿,你学了这么多东西,做这件事情应该很简单吧。这个嘛!好像可以那么来着,但是什么来着,不不不,我还在学习的阶段呢!还有很多需要学的东西呢?还没有到实践的时候呢!你也太累了吧,一天到晚都在学习,真的学得进去吗?当然了,我学得很快的, ...
数学探索之多项式与方程其三
伽罗瓦的成功之处在于,将群和域这两个看似无关的东西进行了联系,在这一部分,我们来稍微看看所谓的对应是什么。
域的回顾在开始正题前,我们来稍稍地回忆一些有关域的一些概念,域的内容主要集中在域扩张上。如果扩域可以基于基域形成有限线性空间,则称为有限扩张,其维数则称为扩张的次数,类似于群中的指数。在域上定义多项式,通过多项式的根定义域上的代数元,由添加一个代数元即可得到单代数扩张,多个的话直接叫做代数扩张。然后直接证明,代数扩张都是单代数扩张,单代数扩张等价于有限扩张,到这里这几种扩张的结构基本清晰。于是又开始研究其它扩域,如包含方程根的最小扩域——分裂域,要么包含所有根要么不包含根的正规扩域。前者是用来证明相关定理的有力工具,还能与正规扩域建立等价关系。我们将有限正规扩域称为伽罗瓦扩域,而这即是我们本节研究的重点了。
小小性质伽罗瓦扩域虽说定义简单,但还是有些值得讨论的东西。设E是F的有限扩域,则由定理可知,E必是F的单代数扩域,于是可以找到这个添加元的最小多项式,在此基础上,我们可以得到多项式下的分裂域E⁺,它是E的扩域,也可能是E本身,再由定理可知,它一定是F的正规扩域,我们可以把E⁺ ...
数学探索之多项式与方程其二
伽罗瓦理论最重要的基础是群和域,通过前面的内容,我们已经了解了域的扩张和域的简单分类,所以这部分主要的内容是了解群的一些比较重要的内容。至于群是什么,子群和同构之类的简单内容就不过多赘述了。值得注意群最好的对应,不是加减法,而是集合的映射。
陪集设H是G的子群,任取,记
则称这个集合为H在G中的一个左陪集。
同样的我们有右陪集。在通常的情况下,左右陪集不一定相同,但我们可以很容易地发现,陪集互不相交且正好覆盖父集,即H在G中的所有陪集是G的一个划分,同时更近一步可以得到以下定理。拉格朗日定理:设G是n阶群,H是G的m阶子群,则m必整除n。所得的数n/m称为H在G中的指数,记为[G:H]=n/m。这个定理就是通过陪集划分的性质得出来的,从中我们还可以引出一系列的推论,如,H在G中左右陪集个数相等且均等于H在G中的指数,陪集中元素的个数与H相等。需要注意,这个定理对有限群一定成立,但无限群可能就会有很多奇怪的情况了,最后给一个十分显然的指数公式。定理1:设K≤H≤G是三个群(若不加说明,对于群来说,我们使用K≤H表示,K是H的子群),且G是有限群,则有
循环群在群内我们 ...