查看源代码
出自FlashWiki
对
矢量
的源代码
跳转到:
导航
,
搜索
根据以下的原因,您无权限进行编辑这个页面操作:
您刚才的请求只有这个用户组的用户才能使用:
用户
您可以查看并复制此页面的源代码:
== '''基本概念''' == 矢量,指线性空间中需要大小和方向才能完整表示的物理量,通常绘画成箭号,因此叫矢量。现实世界有些东西只用数值是描述不出来的,因为它还包括方向,比如位移、速度、加速度、力、力矩、动量、冲量等,都是矢量。在数学中,矢量也常称为向量,意指有方向的数量。 == '''向量的表示''' == 在java中,要用code表示向量,你可能会先去找 [http://java.sun.com/j2se/1.3/docs/api/java/util/Vector.html java class Vector] 但是事实上这个类只是数组类的一个扩展,其实对我们的意义并不大。而在Processing 中,我们有自己的向量类,这里介绍一下他的大概结构,要使用向量类的话直接用Processing 的就好了。 public class PVector { public float x; public float y; public float z; PVector(float x_, float y_, float z_) { x = x_; y = y_; z = z_; } PVector(float x_, float y_) { x = x_; y = y_; z = 0f; } /**functionality to go here -- see below**/ } 这里你可能会有二个好奇,第一这个向量类为什么只有x,y,z 3个表示的数量,方向信息在哪呢?第二为什么有2个同名的构造函数? 事实上在给定在三维空间中的任何一个向量,我们可以将其分解成与坐标轴平行的三个分向量表示;给定在二维空间中的任何一个向量,我们将其分解成与坐标轴平行的两个分向量表示。这些分向量因为其方向特殊,我们可以进一步将其简化成没有方向的数量,用x,y,z上的数量表示即可。至于为什么同名,是因为这是java的特性 [http://codeguru.earthweb.com/java/tij/tij0050.shtml 重载],根据参数的不同而动态调用名字相同而方法不同的函数。这种语法在java中是合法的。 要描述一个物体在一个虚拟空间的运动,我们需要用一些信息来描述它。比如在一个二维空间(就像我们电脑的显示屏),一个方块从屏幕的一端移动到另一端。那么在每一个瞬间会有如下信息来描述它的状态: * 位置 — 物体的位置,在二维空间里可以用一个点来表示。 * 速度 — 单位时间里物体位置的变化量,在二维空间里用一个向量来表示。 * 加速度 — 单位时间里物体速度的变化量,在二维空间里用一个向量来表示。 严格的来说,表示位置信息的是一个点,表示速度和加速度的是向量。然后为了简化我们的程序,我们将位置也用一个向量表示,其实这里只是借用了向量的属性来储存位置信息,意义上不是一样的。 好,现在我们有三个向量,下面介绍一种描述物体运动最简单的算法思路。 速度 += 加速度 位置 += 速度 得到新位置以后,在新位置绘制物体 这里你会发现需要给向量做加法了。然而对于二维向量,它是用一对数值来表示的,所以我们不能用传统的四则运算来做向量加法了,下面介绍一下如用向量来做加减法。 == '''向量的运算''' == 假设这里有3个向量 v = (vx,vy), u = (ux,uy), w = (wx,wy) u = v + w --> ux = vx + wx, uy = vy + wy u = v - w --> ux = vx - wx, uy = vy - wy 同样的,加法的交换律和结合律同样适用: v + w = w + v u + (v + w) = (u + v) + w 对于向量,还可以用一个向量乘以和除以一个数量 v = w * n --> vx = wx * n, vy = wy * n v = w / n --> vx = wx / n, vy = wy / n (n*m)*v = n*(m*v) (n+m)*v = n*v + m*v n*(v+u) = n*v + n*u 对于我们现在的应用,只需要掌握向量之间的加法和减法,以及向量和数量之间的乘法和除法。其实向量之间的运算一共只有三种,加法,减法和乘法,乘法这里我们就不与考虑了,可能将来会进一步介绍。 关于向量的另一项遇到的最多运算应该就是计算向量的长度(或数量),前面我们说过向量是有方向的数量,那么它的数量(这里我们称为长度可能更直观一些)如何计算呢? 向量的长度通常用 ||v|| 表示. 下面的公式你会发现其实就是勾股定理: ||v2|| = sqrt ( vx*vx + vy*vy ) //对于二维向量: ||v3|| = sqrt ( vx*vx + vy*vy + vz*vz) //对于三维向量: == '''参考阅读''' == * Some links about vectors: [http://www.netcomuk.co.uk/~jenolive/homevec.html Working with vectors], [http://www.glenbrook.k12.il.us/gbssci/phys/Class/1DKin/U1L1b.html Describing Motion], [http://csep10.phys.utk.edu/astr161/lect/history/velocity.html Vectors: Velocities, Accelerations, and Forces] * [http://www.amazon.com/gp/product/1584503300/ Mathematics and Physics for Programmers], Chapter 5 — Vectors, Danny Kodicek (suggested) * [http://paulgraham.com/hp.html Hackers and Painters], Paul Graham
返回到
矢量
。
查看
页面
讨论
查看源代码
历史
个人工具
38.107.191.109
该IP的对话页
登录
导航
首页
社区
当前事件
最近更改
随机页面
帮助
搜索
工具箱
链入页面
链出更改
特殊页面