这几天,在看Unity3D,很有意思,其中看到,第一人称控制器,就想看到里面的一些控制脚本是如何实现,才发现,学到的好多数据知识已经还给老师了,还好,走遍大江南北,跟着的书不多,唯一的二本高数没丢.
然后参考网上各个简洁明了的讲洁.
主要有http://my.csdn.net/cppyin 的从零实现3D图像引擎.
用此文只是用来记录一些向量,矩阵等的操作.没别的实际意义.会与我的学习来更新此文章.
1.求矩阵的逆矩阵。
type XMatrix3 =
class
val m11:float
val m12:float
val m13:float
val m21:float
val m22:float
val m23:float
val m31:float
val m32:float
val m33:float
//new (x11,x12,x21,x22) = XMatrix(this.m11 = x11;this.m12 = x12;this.m13 = 0.0;this.m21 = x21;this.m22 = x22;this.m23 = 0.0;this.m31 = 0.0;this.m32 = 0.0;this.m33 = 1.0)
new (x11,x12,x13,x21,x22,x23,x31,x32,x33) = {m11 = x11;m12 = x12;m13 = x13;
m21 = x21;m22 = x22;m23 = x23;
m31 = x31;m32 = x32;m33 = x33}
new (x11,x12,x21,x22) = {m11 = x11;m12 = x12;m13 = 0.0;
m21 = x21;m22 = x22;m23 = 0.0;
m31 = 0.0;m32 = 0.0;m33 = 1.0}
//求行列式
member r.Det = r.m11*(r.m22*r.m33 - r.m32*r.m23) -
r.m12*(r.m21*r.m33 - r.m31*r.m23) +
r.m13*(r.m21*r.m32 - r.m31*r.m22)
member r.Inverse =
let det = r.Det
let det_inv = 1.0/det
new XMatrix3((r.m22*r.m33 - r.m32*r.m23)*det_inv,
-(r.m12*r.m33 - r.m32*r.m13)*det_inv,
(r.m12*r.m23 - r.m22*r.m13)*det_inv,
-(r.m21*r.m33 - r.m31*r.m23)*det_inv,
(r.m11*r.m33 - r.m31*r.m13)*det_inv,
-(r.m11*r.m23 - r.m21*r.m13)*det_inv,
(r.m21*r.m32 - r.m31*r.m22)*det_inv,
-(r.m11*r.m32 - r.m31*r.m12)*det_inv,
(r.m11*r.m22 - r.m21*r.m12)*det_inv)
end
let a = XMatrix3(1.0,2.0,-1.0,3.0,1.0,0.0,-1.0,0.0,-2.0)
let d = a.Det
let v = XMatrix3(3.0,-4.0,1.0,-2.0)
let s = v.Inverse
let ss = s.m11,s.m12,s.m21,s.m22