3D数学基础-向量运算基础和矩阵变换
2020年7月26日更新:
最近对变换重新学习整理了,文章在:图形学常见的变换推导。
最近在跟公开课 edx 的 Computer Graphics(想一起学的告诉我!),这篇笔记主要介绍了图形学中会用到的比较基础的3D数学,重拾大学线性代数知识。
基础运算
点积(Dot Product)
将向量相乘得到一个标量
可以通过两个向量除以它们的模得到两个向量之间的夹角
用途:
求两个向量之间的夹角(光源和表面之间夹角的余弦值对于投影来说非常重要)
找到一个向量在另一向量上的投影也非常重要(比如我们想知道一个点在新的坐标系下的坐标)。
点积在笛卡尔坐标系下很有用
a⃗⋅b⃗=∥a∥∥b∥cosθ\vec{a} \cdot \vec{b}=\|a\|\|b\| \cos \theta
a⋅b=∥a∥∥b∥cosθ
叉积(Cross Product)
将向量相乘得到一个正交向量(垂直于向量a和向量b)
a×b=−b×a∥a×b∥=∥a∥∥b∥sinθ\begin{array}{l}{a \times b=-b \times a} \\ {\|a \times b\|=\|a\|\|b ...
Windows 效率软件推荐
用了几年苹果电脑之后,最近开始用回 Windows 系统,找到一些十分好用的效率向的工具,同时受 效率必备,软件推荐 启发,写篇文章推荐一下。
ShareX
ShareX 是一款主打捕获屏幕、文件分享、和生产力的开源工具。下面是我用 ShareX 来录制软件界面的 GIF 动图,可以看看其丰富的功能。
和 QQ 自带的截图功能和国人开发的 Snipaste 不同,ShareX 的截图不仅仅止于截图后进行批注。ShareX 除了支持和 Snipaste 相似的捕捉窗格(活动的窗口、窗口内的元素等)截图功能外,还支持各种后续的动作,形成一个动作链以节省时间。
截图
例如截完图后可以打开编辑窗口编辑,同时保存图片到自定的目录和剪贴板等等,自己可以自定义其动作链。建议勾选复制到剪贴板,文后会完成一个利用快捷键完成截图上传的动作链(你也可以直接配置截图完进行上传,看个人习惯)。
上传
ShareX 的上传分为图片上传、文字上传和 URL 短链分享。图片可以上传到不同的图床:Imgur、Google Photos、TinyPic 等等,同样的,文件也可以上传到不同的文件共享网站:Dropb ...
自己的阅读兴趣
本文是为了响应图灵社区自己的兴趣爱好的撰文活动,搬来博客刷下活跃度。
才发现自己的完成番茄数就在不久前破千了!趁着活动还在,来社区写一篇文章总结下。
翻了翻番茄的记录,最早的番茄是在今年的2月10日凌晨完成的,直至今天共过了175天,这么算来一天才完成5.73个番茄,这远远达不到自己当初设定每天八个番茄的目标,但是这习惯也算是坚持下来了。自己当初使用 番茄土豆 记录番茄的初衷,就是想从懒散的生活节奏中挤出一点时间,分给阅读、学习、写作和英语(除去上课的时间)。现在看统计图,阅读占了其中一大半的时间。
自己阅读了将近248个小时,显然阅读已经成为了我的兴趣爱好。
自己看书看的题材很广泛、也很狭窄。广泛的是编程什么领域都会看一点,编程语言如 Swift、Golang、Python等,技术如算法、前端向的 Angular、后端向的 Rails on Ruby、Django、移动端的 iOS 等等,狭窄的就是很少去看计算机外的书。
现在看来,什么都想了解的兴趣能够让你翻开一本书,但是兴趣太广泛则不是什么好事情,自己现在还没有构建技术栈。好处也有,什么都略懂一点,这也是自己社区简介中 “全 ...
《流畅的 Python》读书笔记
两个问题
学了 Python 基础就够了吗?
前言的引言给出了答案:
要不这样吧,如果编程语言里有个地方你弄不明白,而正好又有个人用了这个功能,那就开枪把他打死。这比学习新特性要容易些,然后过不了多久,那些活下来的程序员就会开始用 0.9.6 版的 Python,而且他们只需要使用这个版本中易于理解的那一小部分就好了(眨眼) 。
—— Tim Peters
传奇的核心开发者, “Python 之禅”作者
这本书的目的是什么?
第十一章的杂谈里给出了答案:
这正是本书的主要目的:着重讲解这门语言的基本惯用法,让你的代码简洁、高效且可读,把你打造成熟练的 Python 程序员。
另外本书的前言里也有提及书本的目标读者和非目标读者。
如果你才刚刚开始学 Python,本书的内容可能会显得有些“超纲”。比难懂更糟的是,如果在学习 Python 的过程中过早接触本书的内容,你可能会误以为所有的 Python 代码都应该利用特殊方法和元编程(metaprogramming)技巧。我们知道,不成熟的抽象和过早的优化一样,都会坏事。
对内容的一些评价
从书目录结构来看,作者的眼界十分开阔 ...
《流畅的 Python》读书笔记
两个问题
学了 Python 基础就够了吗?
前言的引言给出了答案:
要不这样吧,如果编程语言里有个地方你弄不明白,而正好又有个人用了这个功能,那就开枪把他打死。这比学习新特性要容易些,然后过不了多久,那些活下来的程序员就会开始用 0.9.6 版的 Python,而且他们只需要使用这个版本中易于理解的那一小部分就好了(眨眼) 。
—— Tim Peters
传奇的核心开发者, “Python 之禅”作者
这本书的目的是什么?
第十一章的杂谈里给出了答案:
这正是本书的主要目的:着重讲解这门语言的基本惯用法,让你的代码简洁、高效且可读,把你打造成熟练的 Python 程序员。
另外本书的前言里也有提及书本的目标读者和非目标读者。
如果你才刚刚开始学 Python,本书的内容可能会显得有些“超纲”。比难懂更糟的是,如果在学习 Python 的过程中过早接触本书的内容,你可能会误以为所有的 Python 代码都应该利用特殊方法和元编程(metaprogramming)技巧。我们知道,不成熟的抽象和过早的优化一样,都会坏事。
对内容的一些评价
从书目录结构来看,作者的眼界十分开阔 ...
Go 语言的网络编程简介
本文通过 Go 语言写几个简单的通信示例,从 TCP 服务器过渡到 HTTP 开发,从而简单介绍 net 包的运用。
TCP 服务器
首先来看一个 TCP 服务器例子
tcp-write/main.go1234567891011121314151617181920212223242526272829303132333435package mainimport ( "fmt" "log" "net")func main() { // net 包提供方便的工具用于 network I/O 开发,包括TCP/IP, UDP 协议等。 // Listen 函数会监听来自 8080 端口的连接,返回一个 net.Listener 对象。 li, err := net.Listen("tcp", ":8080") // 错误处理 if err != nil { log.Panic(err) } // 释放连接,通过 defer 关键字可以让连接在函数结束前进行释放 ...
聊聊慕课与时间管理工具
在图灵社区活动「分享学习方法」中写了这篇文章,现在搬运过来,浅浅地普及下慕课这种学习新方式和目前所选用的时间管理工具。
MOOC
我以前有过看视频学编程的时光,视频里老师写一点代码,我就写一点代码。如今想起来这种方法虽然浪费时间,但是对小白而言是一个很好的入门方法,能够有效的让小白熟悉 IDE 和手把手入门编程。
MOOC 则是最近又让我眼前一亮的学习方式,其代表有:Coursera、Edx 、Udacity等。同样是看视频学习,Coursera 使用了短视频+限时作业+考试的方法来让学生能轻松上课的同时,用 deadline 督促学生。其次付费证书和其课堂论坛也是亮点,你上完一个课程,可以付费购买课程的证书以彰显你的努力,论坛则是开放给全球各地上同样一节课的学生。Coursera 里有部分课程都是有中文字幕的,例如普林斯顿大学的「Algorithms」课。算法红宝书《算法(第4版)》的作者就是这门课的老师,Robert Sedgewick 老师在课程中给的图例和制作的动画都十分清晰精致,并且配合课件能循序渐进地分解算法。其中小课程一般一节讲一个算法或知识点,内容充实并且需要学生课下 ...
装饰器模式(Swift)
阅读《大话设计模式》和《精通 Swift 设计模式》中的装饰器模式,本文为笔记。
简介
装饰器模式,可以用于在运行时选择性地修改对象的行为,在处理无法修改的类时能发挥其强大的能力。
我们可以在想修改对象的行为时,又不想修改对象所属的类或其使用者,就可以使用装饰器模式。如果想修改对象的类实现,则不推荐使用装饰器模式,此时直接修改类往往更简单。
例子
阅读前请下载 OS X 命令工具行初始项目 Decorator_start,项目中注释较详细,如有问题请联系我。
项目地址:Decorator_in_Swift
Purchase 类表示顾客在商店买了什么,其中定义了两个属性来存储商品名称和价格,还有两个计算属性把信息提供给外界。
CustomerAccount 类表示一组 Purchase 对象,代表了顾客所购买的商品,addPurchase(Purchase)方法代表顾客购买了新商品。
Options 类中包含三个类,为前两个类提供了礼品服务,例如:2 元的礼品包装、1 元的彩带和 5 元的礼品配送。这里利用继承在 Options 类创建了三个装饰器类解决一个小问题——在不修改原来的 ...
IRB 中操作 MongoDB
又在 Coursera 里面选了门课坑自己
最近又学了很多东西,其中记不住的做笔记记下来,这篇文章是为 Ruby on Rails 运用 MongoDB 做准备。
基础命令
Mac 下安装 MongoDB 可以参考 Mac下使用brew安装mongodb。
启动数据库
1% mongod
进入命令行模式
1% mongo
导入 MongoDB 提供的示例数据
示例数据下载
在 json 文件所在的文件夹下导入数据库。
1% mongoimport --db test --collection zips --drop --file zips.json
irb Shell 中的一些基础操作
12345678910111213141516171819202122irb2.3.3 :001 > require 'mongo' => true2.3.3 :002 > db = Mongo::Client.new('mongodb://localhost:27017')D, [2017-02-16T00:06:03.651134 ...
iOS 动画笔记
大坑未填完,发布下博文降低罪恶感…
人生的意义就是不断地挖坑,并不断地去填补。
——猫冬
本文为《iOS Animations by Tutorials》笔记上篇,代码用 swift 3 编写。
动画属性
简单的动画
123456789101112131415@IBOutlet var heading: UILabel!override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) UIView.animate(withDuration: 0.5, delay: 0.3, options: [], animations: { // 动画后位置 self.heading.center.x += self.view.bounds.width }, completion: nil)}override func viewWillAppear(_ animated: Bool) { super.viewWillAppea ...