本文将介绍使用面向对象的思想去封装一个二维向量的工具库,ai本身并不完全支持面向对象,但是面向对象毕竟只是一种思想,我们可以使用列表,使用一些命名规则来模拟面向对象的思想,废话不多说,我们立刻开始吧!!!
定义二维向量
我们需要定义一个二维向量对象,一个二维向量有两个分量x,y,包含方法,所以我们需要做如下工作。
1、创建构造函数如图

2、添加getter和setter

3.创建成员函数
作为一个向量,有两个分量作为成员变量之外,还有若干个成员函数,在高中的时候我们学习过,二维平面向量之间是可以做向量加法、向量减法、向量数乘、向量的模长、向量的点乘(数量积)、单位向量(归一化),相反向量等,我们现在需要逐步实现一个二维向量对象的所有运算。
克隆副本(clone)
有时候我们需要将当前向量的一份拷贝,所以定义成员函数clone如下,
向量加法(add)
向量加法就是把两个向量的对应分量依次相加生成新的向量。

取相反向量(negate)
取相反向量就是将一个向量的两个分量全部变为原来的相反数得到一个新的向量。

向量减法(subtract)
向量减法就是将两个向量的分量对应做减法得到两个新的分量所构成的新的向量。但是,我们前面定义过向量加法和取相反向量,那么我们还有一种思路就是一个向量加上另一个向量的相反向量,如计算1-2=1+(-2)

向量的数乘运算(multiply)
向量的数乘运算指的是向量的每一个分量依次乘同一个数字所构成一个新的向量,如图,

向量的点乘或数量积(dot)
向量的点乘指的是两个向量的对应分量相乘再相加,如图,

向量的模长(length)
向量的模长指的是一个向量每个分量的平方和开根号,现实中开根号的计算对于计算机而言计算量较大,故大部分情况下使用的是向量模长的平方即去掉根号。所以,本方法可由下面的方法直接开根号得到。

向量的模长的平方(sqrLength)
向量的模长平方是每个分量的平方和,其实就是两个同一个向量做点乘,如图,
标准化向量,向量归一化(normalize)
标准化向量指的是向量的方向不变,模长变为1的向量,计算方法为一个向量数乘该向量的模长。

输出字符串(toString)
为了方便调试,写一个成员函数可以输出当前向量的文本信息。

4.调试
使用一个可滚动垂直布局和标签可以显示调试信息

代码如下,

现在来调试一下我们的向量库能否正常使用,代码如下,

输出如下信息:

截至目前,我们的二维向量工作一切正常,本篇文章也就结束了,本文带着大家做了一个二维向量计算库,当然也可以直接创建三维向量。但是,本文的真正目的并不是做一个二维向量工具库,而是带着大家初步尝试使用面向对象的思想去设计程序,平时我们使用ai
去设计程序虽然也大量的用到了过程来实现代码块的复用,但是一旦工程量变大之后,我们就会发现各个过程乱七八糟地存放在抽屉里,想要调用的时候就查找半天,而且封装性也比较低。本文所介绍的思想可以很轻易地实现代码块的复用,只需右键复制所有代码块到背包,再到一个新的项目或新的屏幕里将背包里所有代码库复制到代码区即可引入我们写的库,极大方便了ai程序的开发。
下一章我们将继续尝试运用这种思想开发一个矩阵运算库。
网友评论