1.三角函数

坐标轴采用右手法则,沿Z轴的逆时针方向为正角度,假设原始点为p(x,y,z),a是X轴旋转到点p的角度,r是从原始点到p点的距离。用这两个变量计算出点p的坐标,等式如下:

  1. x = rcos a;
  2. y = rsin a;

类似的可以使用r,a,b(p旋转的角度)来表示p'的坐标:

  1. x' = r cos(a + b);
  2. y' = r sin(a + b);

利用三角函数两角和公式:

  1. sin(a +/- b) = sin a cos b +/- cos a sin b
  2. cos(a +/- b) = cos a cos b -/+ sin a sin b

可得:

  1. x' = r(cos a cos b - sin a sin b)
  2. y' = r(sin a cos b + cos a sin b)

最后将x,y等式带入,消除r 和 a 可得等式:

  1. x' = x cos b - y sin b
  2. y' = x sin b + y cos b
  3. z' = z

另外计算中也会用到弧度计算功能:

  1. radian = a * (PI / 180)

2.变换矩阵:旋转

矩阵和矢量的方式可以用如下等式表示:

等式的右边由x、y、z组成的矢量被称为三维矢量。计算方式如下:

  1. x' = ax + by + cz
  2. y' = dx + ey + fz
  3. z' = gx + hy + iz

在看看三角函数的等式,并与其比较:

  1. x' = ax + by + cz
  2. x' = x cosb - y sinb

如果 a = cosb, b = -sinb,c = 0,那么两个等式完全相同。在看y':

  1. y' = dx + ey + fz
  2. y' = x sinb + y cosb

如果 d = sinb, e = cobb, f = 0,那么两个等式完全相同。将这些结果代入到等式3.4中,得到等式:

这个矩阵被称为变换矩阵(transformation matrix),也被称为旋转矩阵(rotation matrix)。

3.变换矩阵:平移

平移公式:x' = x + Tx。

如下所示是4*4矩阵:

该矩阵的乘法结果如下所示:

根据最后一个式子 1 = mx + ny + oz + p,很容易求得系数m = 0, n = 0, o = 0, p = 1;比较x',可知 a = 1, b = 0, c = 0, d = Tx;类似地,比较y',可知e = 0, f = 1,g = 0, h = Ty;比较z',可知i = 0, j = 0, k = 1, l = Tz。这样,就可以写出表示平移的矩阵,又称为平移矩阵(translation matrix)。如下所示:

4. 4*4的旋转矩阵

将旋转矩阵从一个3*3矩阵转变为一个4*4矩阵,只需要将旋转公式和4*4矩阵公式比较下:

  1. x' = xcosb - ysinb
  2. y' = xsinb + ycosb
  3. z' = z
  4. x' = ax + by + cz + d
  5. y' = ex + fy + gz + h
  6. z' = ix + jy + kz + l
  7. l = mx + ny + oz + p

例如,当你通过比较x' = xcosb - ysinb与x' = ax + by +cz +d时,可知a = cosb, b = -sinb, c= 0, d = 0。以此类推,求得y'和z'等式中的系数,最终得到4*4的旋转矩阵。如下所示:

5.变换矩阵:缩放

假设在三个方向X轴,Y轴,Z轴的缩放因子Sx, Sy, Sz不相关,那么有:

  1. x' = Sx * x
  2. y' = Sy * y
  3. z' = Sz * z

和矩阵的乘法结果比较,可知缩放操作的变换矩阵:

6.distance(position1, position2)

顶点着色器内置函数,计算出两个坐标之间的距离。参数:

position1:第一个坐标
    position2:第二个坐标
    返回距离,值为float类型

7.mix(x, y, z)函数(数学函数x*(1-z) + y*z)

GL_ES内置函数,该函数会计算x*(1-z) + y*z,其中x、y、z分别为第1、2和3个参数。

WebGL常用数学公式的更多相关文章

  1. MarkDown 编辑数学公式

    1. 参考博客:http://blog.csdn.net/smstong/article/details/44340637 1 数学公式的web解决方案 在网页上显示漂亮的数学公式,是多年来数学工作者 ...

  2. LaLeX数学公式

    启用数学公式: 需要插入公式时,用 $ 将公式包围.若需要输入多行,则用一对 $$ 包围. 例如: $$ \rho = \sqrt{(\Delta x)^{2}+(\Delta y)^{2}} \\ ...

  3. iOS开发中常用的数学函数

    iOS开发中常用的数学函数 /*---- 常用数学公式 ----*/ //指数运算 3^2 3^3 NSLog(,)); //result 9 NSLog(,)); //result 27 //开平方 ...

  4. AS3动画效果常用公式

    缓动公式: sprite.x += (targetX – sprite.x) * easing;//easing为缓动系数变量 sprite.y += (targetY – sprite.y) * e ...

  5. Latex常用公式整理

    目录 常用 常用数学公式 常用希腊字母 说明:博客园中的Latex编辑是以$ latex公式 $,为边界. 1.常用 描述 Latex公式 表达式 下标 x_2 x2 上标 x^2 x2  分数 \f ...

  6. 【转载】markdown数学常用公式箭头符号

    来源1:https://www.jianshu.com/p/3f01c5658356 来源2:https://blog.csdn.net/smstong/article/details/4434063 ...

  7. ACM竞赛 Java编程小结

    1.字符串的长度 String str = new String(" abcd"); int length = str.length(); 2.数组的长度.排序 2.1对于 a[] ...

  8. 使用css3画饼图

    CSS3 Gradient介绍参考地址: http://www.cnblogs.com/lhb25/archive/2013/01/30/css3-linear-gradient.html http: ...

  9. as3 公式

    AS3缓动公式:sprite.x += (targetX - sprite.x) * easing;//easing为缓动系数变量sprite.y += (targetY - sprite.y) * ...

随机推荐

  1. How to Use updateConstraints(什么时候该使用updateConstraints)

    How to Use updateConstraintshtml, body {overflow-x: initial !important;}html { font-size: 14px; } bo ...

  2. [Java程序员面试宝典]读书笔记

    ClassLoader具备层次关系,且不止一种.不同的类装载器分布创建的同一个类的字节码数据属于完全不同的对象,没有任何关联 通过Class.forName(String className),能够动 ...

  3. CSS(三):引入样式和优先级

    CSS的引入样式总共有三种:行内样式(内联样式表).内部样式表.外部样式表.下面分别来介绍这三种样式. 一.行内样式 行内样式也叫内联样式,使用style属性引入CSS样式.看下面的示例: <! ...

  4. SpringBoot2 启动报错 Failed to auto-configure a DataSource

    今天Spring Boot 2.0正式版发布,寻思着搭个小demo尝试一下Spring Boot的新特性,使用idea创建项目.在选择组件时添加了mysql.mybatis 然后在第一次启动的时候启动 ...

  5. Remove 以及dorp做实验验证MongoDB删除文档后索引是否会自动删除

    下面是实验步骤: > db.things.find(){ "_id" : ObjectId("5652d71a1524dc14663060e8"), &q ...

  6. 配置文件报错:不允许有匹配 [xX][mM][lL] 的处理指令目标。

    http://www.68idc.cn/help/buildlang/ask/20150108163110.html ————————————————————————————————————————— ...

  7. SpringMVC深度探险(四) —— SpringMVC核心配置文件详解

    在上一篇文章中,我们从DispatcherServlet谈起,最终为读者详细分析了SpringMVC的初始化主线的全部过程.整个初始化主线的研究,其实始终围绕着DispatcherServlet.We ...

  8. nodejs应用在linux服务器中的部署

    1.(可选)添加用户: addgroup wmui添加用户组useradd -d /home/wmui -s /bin/bash -m wmui创建wmui用户passwd wmui设置密码,如果忘记 ...

  9. 【2】JVM-JAVA对象的访问

    Java中对象的访问 JAVA是面向对象的语言,那么在JAVA虚拟机中,存在非常多的对象,对象访问是无处不在的.即时是最简单的访问,也会涉及到JAVA栈.JAVA堆.方法区这三个非常重要的内存区域之间 ...

  10. ERROR:tornado上传文件过大超出范围报错

    该怎么解决呢? HTTPServer里面指定max_buffer_size就可以了 EXAMPLE # server = HTTPServer(application, max_buffer_size ...