<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Peerlessbloom]]></title><description><![CDATA[莫茗琪妙]]></description><link>https://blog.youkuaiyun.com/PeerlessBloom</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; PeerlessBloom]]></copyright><item><title><![CDATA[C++黑魔法系列2: lvalue, move constructor, copy and swap]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/77096198</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/77096198</guid><author>PeerlessBloom</author><pubDate>Tue, 15 Aug 2017 20:43:02 +0800</pubDate><description><![CDATA[介绍了左值&右值
move语意
copy and swap
rule of 5]]></description><category></category></item><item><title><![CDATA[C++黑魔法系列1：进击的define]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/74999186</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/74999186</guid><author>PeerlessBloom</author><pubDate>Tue, 11 Jul 2017 21:45:37 +0800</pubDate><description><![CDATA[本节主要讲define的两个用法：## 和 宏展开
1. ##
##的作用是连接两个参数。例如对于下面的宏定义#define CONCAT(X, Y) X##Y调用将得到ab：
CONCAT(a,b)                     #ab




有什么高级用法呢？可以自动生成类
#define AUTO_GEN_CLASS(Name)\
	class Name\
	{]]></description><category></category></item><item><title><![CDATA[网易游戏两年小结]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/73327410</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/73327410</guid><author>PeerlessBloom</author><pubDate>Fri, 16 Jun 2017 12:39:15 +0800</pubDate><description><![CDATA[最近因为找工作，又开始撸博客了。放了一些没有发布到网易内部的文章上来。
在网易游戏工作了两年，才算是刚入门而已，因为个人原因，打算去上海了。


网易游戏是什么样的公司？
通过我的观察，网易游戏是一个十分开放的平台，你能发展成什么样完全靠自驱。平台上有许多资源，各个方面的都有，大神也有很多。我遇见过工作很久专业技能一般的员工，也遇到过一进来就大放异彩的员工。总体来说，程序员的水平都挺高（]]></description><category></category></item><item><title><![CDATA[part 8: comparison between OOL and FL]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72727316</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72727316</guid><author>PeerlessBloom</author><pubDate>Thu, 25 May 2017 14:51:16 +0800</pubDate><description><![CDATA[OOP和函数编程的区别
表格：行是operation，列是variant


函数编程：
     每个operation都是一个函数，每个函数都有若干branch，每个branch都对应一个variant
     定义datatype，每个variant都对应一个constructor
面向对象编程：
     定义一个基类，每个operation是一个类函数，基类中的函数是抽]]></description><category></category></item><item><title><![CDATA[[OOL]part 7: 基本概念]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72726747</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72726747</guid><author>PeerlessBloom</author><pubDate>Thu, 25 May 2017 14:48:13 +0800</pubDate><description><![CDATA[纯面向对象语言: Ruby


1.纯面向对象语言：所有的值都是对象
2.class-based: 对象都是类的实例
3.mixin
4.dynamically typed
5.reflection
6.有blocks和closures
7.是scripting language: 写小程序，性能相对差


duck typing: If it walks like a d]]></description><category></category></item><item><title><![CDATA[[dynamic FL]part 6:comparison between Dynamic and Static]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72726577</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72726577</guid><author>PeerlessBloom</author><pubDate>Thu, 25 May 2017 14:45:09 +0800</pubDate><description><![CDATA[各种语言的比较：
Dynamic type language VS Static type language:
     Dynamic看待Static: ML好像只是Racket的子集。ML会拒绝更多程序, 可能有bug的也可能是没有bug的。
     Static看待Dynamic: Racket好像只是ML的子集，所有的表达式都属于某一个大的数据类型，并且有很多子类型，这些类型有类似]]></description><category></category></item><item><title><![CDATA[[dynamic FL]part 5:基本概念]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72726217</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72726217</guid><author>PeerlessBloom</author><pubDate>Thu, 25 May 2017 14:42:46 +0800</pubDate><description><![CDATA[Racket: 动态语言，而非静态
Racket和Scheme同源，来自LISP。可以讲任何类型的数据放在任何相仿的地方


Racket由一组definition组成，括号用来求值e并调用函数。
     括号内可以有atom: 包含特定值，变量和关键字(define lambda if)。
     所有的东西都是前缀形式，如2+3=>(+ 2 3)
(t1 t2 …)：如果t1]]></description><category></category></item><item><title><![CDATA[[static FL]part4: expression]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72726122</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72726122</guid><author>PeerlessBloom</author><pubDate>Thu, 25 May 2017 14:30:07 +0800</pubDate><description><![CDATA[let expression: let b1, b2... in e end
     bi是biding
     定义局部变量
     scope of binding: 在let中定义了该binding之后，以及e中都可以使用这个binding
     let的类型就是e的类型
     inner binding shadow outer ones
     let 也可以]]></description><category></category></item><item><title><![CDATA[[static FL]part3: type]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72726114</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72726114</guid><author>PeerlessBloom</author><pubDate>Thu, 25 May 2017 14:29:34 +0800</pubDate><description><![CDATA[pair type: (e1, e2)
     typing: t1*t2, t1,t2分别是e1和e2的值
     取值：#1, #2
     可以nest，但是只能有两项


tuple type:(e1, e2...)
     类似pair，本质是record
     和record(by name)比，是by position, 顺序是有意义的
     语法糖]]></description><category></category></item><item><title><![CDATA[[static FL]part2: binding]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72726103</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72726103</guid><author>PeerlessBloom</author><pubDate>Thu, 25 May 2017 14:28:44 +0800</pubDate><description><![CDATA[variable binding: val x = e
val: keyword
x: variable
e: expression
v: value(不需要做多余计算的表达式)
t: type


function binding: fun x0(x1: t1, x2: t2...) = e
    typing:
          static environment o]]></description><category></category></item><item><title><![CDATA[[static FL]part1:基本概念]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72725394</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72725394</guid><author>PeerlessBloom</author><pubDate>Thu, 25 May 2017 13:59:26 +0800</pubDate><description><![CDATA[函数式语言：
F#是ML的一个变种，在.net平台上运行; 其他的还有Haskell, OCaml
ML：static functional language
函数编程：1. immutable data; 2. function as value
ML是一系列的binding，如果一个binding type-checked(类型检查通过)就evaluate(求值)
binding的类]]></description><category></category></item><item><title><![CDATA[声明]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72724551</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72724551</guid><author>PeerlessBloom</author><pubDate>Thu, 25 May 2017 13:27:08 +0800</pubDate><description><![CDATA[本系列来自UW的CSE341系列，是很有趣的函数式编程入门。
无论你是否打算使用函数式语言，学习了解它都是可以开拓思路的~
推荐CSE341: Programming Languages, Winter 2013]]></description><category></category></item><item><title><![CDATA[最小生成树----Kruskal算法&并查集]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72722874</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72722874</guid><author>PeerlessBloom</author><pubDate>Thu, 25 May 2017 13:20:24 +0800</pubDate><description><![CDATA[对于图寻找最小生成树
顶点v使用并查集，初始状态下所有顶点都是一个集合。
Kruskal算法描述：
取最短的边，比较是否两个顶点都在同一集合内：如果都在，则舍弃


初始化时，v长这样
v = [i for i in xrange(0, length)] 并(i, j)的操作就是合并两个集合的跟：
r_i = find_root(v, i)
r_j = find_root(v, j]]></description><category></category></item><item><title><![CDATA[最小生成树----Prim算法+loose操作]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72702278</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72702278</guid><author>PeerlessBloom</author><pubDate>Wed, 24 May 2017 21:26:28 +0800</pubDate><description><![CDATA[对于图求最小生成树


Prim算法中，有两个顶点集合：v和u，一个边的集合：e
v：e中的顶点
u：all - v
e：存放所有已选的边
算法描述：
从所有边中取最短的边e(i,j)，i属于v，j属于u。
将e(i,j)放入e中
将j从u中放入v中
在写算法的过程中，增加了数据结构waiting_edge，存放所有(v,u)点对
def prim(graph):
	v =]]></description><category></category></item><item><title><![CDATA[最短路径算法----Bellman-ford和SPFA算法]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72677026</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72677026</guid><author>PeerlessBloom</author><pubDate>Wed, 24 May 2017 17:10:35 +0800</pubDate><description><![CDATA[思路类似Dijkstra，可以处理负权边，还可以发现负权回路。
核心也是：对于边e(i,j), 如果w(i) + e(i,j) wiki）
对于图


有
def bellman_ford(graph, start_node):
	# graph:n*n matrix
	# find min distance from start_node
	length = len(graph)]]></description><category></category></item><item><title><![CDATA[最短路径算法----Floyd-warshall（十字交叉算法证明）]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72674293</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72674293</guid><author>PeerlessBloom</author><pubDate>Wed, 24 May 2017 12:25:31 +0800</pubDate><description><![CDATA[Floyd不同于Dijkstra，可以得到所有点对的最短路径。使用的是DP
Floyd可以处理有负权重边的情况
递推公式：w(i, j) = min{w(i, j), w(i, k) + w(k, j)}，含义是
【i到j的最短距离】=【i到k的最短距离+k到j的最短距离】与【i到j的最短距离】中较小的那一个
看起来很简单，但是具体怎么计算呢？


依旧使用这个例子，图的表示方式为：]]></description><category></category></item><item><title><![CDATA[声明]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72644952</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72644952</guid><author>PeerlessBloom</author><pubDate>Tue, 23 May 2017 16:13:14 +0800</pubDate><description><![CDATA[本系列出自 ISBN: 9787121222887 的部分章节总结
感兴趣的读者请支持正版，购买此书，谢谢]]></description><category></category></item><item><title><![CDATA[游戏引擎架构----动画]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72644902</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72644902</guid><author>PeerlessBloom</author><pubDate>Tue, 23 May 2017 16:09:40 +0800</pubDate><description><![CDATA[1.角色动画类型
  赛璐璐动画(cel animation)：基于帧的，电子版本为精灵动画(sprite animation)，可以设计成循环动画(looping animation) 
  刚性层阶式动画(rigid hierarchical animation)：可能在关节处产生裂缝
  每顶点动画(per-vertex animation)：网格添加动画，数据密集
  变形目标动画]]></description><category></category></item><item><title><![CDATA[游戏引擎架构----数学基础]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72644837</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72644837</guid><author>PeerlessBloom</author><pubDate>Tue, 23 May 2017 16:08:23 +0800</pubDate><description><![CDATA[1. 点和矢量
坐标：笛卡尔坐标：多个相互垂直的轴构成的，笛卡尔基矢量
          圆柱坐标系
          球坐标系
左右手坐标系：大拇指、食指、中指分别是x,y,z轴
矢量和点的区别：矢量相对于某个已知点的便宜，一个矢量可以移到三维空间中的任何位置，都是同一个矢量。点是绝对的，矢量是相对的
矢量运算：和标量的乘法
          加法（应用：显示欧拉法求位置）、]]></description><category></category></item><item><title><![CDATA[游戏引擎架构----渲染]]></title><link>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72644498</link><guid>https://blog.youkuaiyun.com/PeerlessBloom/article/details/72644498</guid><author>PeerlessBloom</author><pubDate>Tue, 23 May 2017 16:07:30 +0800</pubDate><description><![CDATA[1. 场景描述
1.1 表面建模
     矩形面片的表示：贝塞尔曲面、非均匀有理B样条、N面片
     细分曲面（subdivision surface）
     三角网格
     =>固定镶嵌（tessellation）
     =>动态镶嵌：细分曲面 or 
LOD：level of detail 物体与虚拟摄像机的距离的缩减而增加面片个数，最近的为LOD0
    ]]></description><category></category></item></channel></rss>