⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrix.html

📁 刚刚看到本站有Visual C++数字图象处理(人民邮电出版社)的电子书
💻 HTML
📖 第 1 页 / 共 3 页
字号:
              <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
              <font face="宋体"><font color="#0000FF">#include</font> &lt;math.h&gt;<br>
              <font color="#0000FF">#include</font> &quot;matrix.h&quot;</font></p>
            </blockquote>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体" size="3">此处包含</font><font face="宋体">math.h头文件的作用是为能够使用C++的数学函数。<br>
            </font><font face="宋体" size="3">&nbsp;&nbsp;&nbsp; 这样就不必为每一个.cpp文件包含类定义头文件Matrix.h了。</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <b><font face="宋体" size="3">D.3.3 </font><font face="宋体">创建CMatrix类对象</font></b><font face="宋体"><br>
            </font>
            <font face="宋体" size="3">&nbsp;&nbsp;&nbsp; 将CMatrix类添加到工程并包含了类定义头文件Matrix.h要使用矩阵类,首先得创建其类对象,有三种方法用以创建矩阵类对象。</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体" size="3" color="#008000">&nbsp;&nbsp;&nbsp; </font>
            <b>
            <font face="宋体" size="3">1. 用无参构造函数CMatrix()</font></b></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体">&nbsp;&nbsp;&nbsp; 在.h头文件或.cpp实现文件中,加入如下代码:</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMatrix 
            m_matOrigin;</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体">&nbsp;&nbsp;&nbsp; 便可创建一个名为m_matOrigin的矩阵类对象。值得注意的是,由于采用的是无参构造函数,所以并未分配用于存储矩阵各个元素内存,因此,还应调用CMatrix类的成员函数:<br>
            	Create(<font color="#0000FF">int</font> RowNumber,
            <font color="#0000FF">int</font> ColumnNumber)<br>
            创建RowNumber×ColumnNumber的矩阵内存堆,此后才能进行矩阵单元的访问。</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体"><font size="3" color="#008000">&nbsp;&nbsp;&nbsp;
            </font></font><b><font face="宋体" size="3">2. 用构造函数CMatrix(int RowNumber, int ColumnNumber)</font></b><font face="宋体"><br>
&nbsp;&nbsp;&nbsp; 在.h头文件或.cpp实现文件中,加入如下代码:</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMatrix 
            m_matOrigin(<font color="#0000FF">int</font> RowNumber,
            <font color="#0000FF">int</font> ColumnNumber);</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体">&nbsp;&nbsp;&nbsp; 便可创建一个名为m_matOrigin的RowNumber×ColumnNumber的矩阵类对象。该构造函数在创建矩阵类对象的同时并为其分配RowNumber×ColumnNumber的内存堆,此后可直接对其矩阵单元的访问。</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体"><font size="3" color="#008000">&nbsp;&nbsp;&nbsp;
            </font></font><b><font face="宋体" size="3">3. 用构造函数CMatrix(CMatrix&amp; 
            Matrix)</font></b><font face="宋体"><br>
&nbsp;&nbsp;&nbsp; 在.h头文件或.cpp实现文件中,加入如下代码:</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMatrix 
            m_matOrigin(CMatrix&amp; Matrix);</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体">&nbsp;&nbsp;&nbsp; 便可创建一个名为m_matOrigin的矩阵类对象,并得到与传入的矩阵Matrix相同大小的内存堆,同时复制传入的矩阵单元到m_matOrigin矩阵的相应单元中,此后也直接对其矩阵单元的访问。</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <b><font face="宋体" size="3">D.3.4 对</font><font face="宋体">CMatrix类对象
            的操作</font></b></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体">&nbsp;&nbsp;&nbsp; 
            完成了矩阵类对象的创建后,便可通过该对象调用其相应的成员函数来完成对该矩阵的单元访问、两矩阵的相乘等操作。</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <b><font face="宋体" size="3">&nbsp;&nbsp;&nbsp; 1. 利用<font color="#FF00FF">[]</font>操作符完成对矩阵单元的访问</font></b></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体">&nbsp;&nbsp;&nbsp; 设有一顶点数为m_nVertexNum多边形的顶点集如下:</font></p>
            <blockquote>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; " align="left">
            <font face="宋体"><font color="#008000">//顶点坐标(采用世界坐标系)</font><br>
            m_ptsOrigin[0] = CPoint(0 , 0 );<br>
            m_ptsOrigin[1] = CPoint(40, 0 );<br>
            m_ptsOrigin[2] = CPoint(40, 80);<br>
            m_ptsOrigin[3] = CPoint(0 , 80);</font></p>
            </blockquote>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体">其中m_nVertexNum为int型的类成员变量,m_ptsOrigin为CPoint对象数组类成员变量,在相应.h头文件中定义(当然可以采用各种合法的方法定义该变量和数组)。可以采用下述方法将顶点集赋于m_matOrigin矩阵并将其转换为齐次坐标。</font></p>
            <blockquote>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; " align="left">
            <font face="宋体"><font color="#008000">//创建m_nVertexNum×3的矩阵</font><br>
            m_matOrigin.Create(m_nVertexNum, 3);</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; " align="left">
            <font face="宋体"><font color="#008000">//将矩阵单元赋0.0</font><br>
            m_matOrigin.Fill(0.0);</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; " align="left">
             </p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; " align="left">
            <font face="宋体"><font color="#0000FF">int </font>i;<br>
            <br>
            <font color="#0000FF">for</font>(i = 0; i &lt; m_nVertexNum; i++)<br>
            {</font></p>
              <blockquote>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; " align="left">
            <font color="#008000">//将顶点的x坐标赋给矩阵的第[0]列</font><br>
            <font face="宋体">m_matOrigin[i][0] = (double)m_ptsOrigin[i].x;<br>
            </font><font color="#008000">//将顶点的x坐标赋给矩阵的第[1]列</font><br>
            <font face="宋体">m_matOrigin[i][1] = (double)m_ptsOrigin[i].y;<br>
            </font><font color="#008000">//将1.0赋给矩阵的第[2]列</font><br>
            <font face="宋体">m_matOrigin[i][2] = 1.0;<br>
 </font></p>
              </blockquote>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; " align="left">
            <font face="宋体">}</font></p>
            </blockquote>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体">至此,便用<b><font color="#FF00FF" size="3">[]</font></b>操作符完成了对矩阵单元的赋值,矩阵m_matOrigin中的各个单元存储的是给定点集的相应齐次坐标。当然,也可以此操作符完成任何矩阵相关的操作。</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; " align="left">
            <b><font face="宋体" size="3">&nbsp;&nbsp;&nbsp; 2. 利用<font color="#FF00FF">*</font>操作符完成矩阵乘运算</font></b><font face="宋体"><br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; 为完成矩阵的乘法,应定义另一个矩阵,可以在程序中加入如下代码:</font></p>
            <blockquote>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; " align="left">
            <font face="宋体">CMatrix Trans(3, 3);<br>
            <font color="#008000">//初始化变换矩阵 </font><br>
            Trans.Fill(0.0);<br>
            Trans[2][2] = 1.0;</font></p>
            </blockquote>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; " align="left">
            <font face="宋体">
            这将创建一个名为Trans的3×3矩阵,并将除Trans[2][2]单元外的所有单元赋零。在此,称其为变换矩阵。</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; " align="left">
            <font face="宋体">&nbsp;&nbsp;&nbsp; 下面仍用<b><font color="#FF00FF" size="3">[]</font></b>操作符完成对变换矩阵的赋值操作,可在程序中加入如下代码:</font></p>
            <blockquote>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; " align="left">
            <font face="宋体"><font color="#008000">//变换矩阵为:<br>
            // 1&nbsp; 0&nbsp; 0<br>
            //<br>
            // 0 -1&nbsp; 0<br>
            //<br>
            // 0&nbsp; 0&nbsp; 1</font><br>
            Trans[0][0] = 1.0;<br>
            Trans[1][1] = -1.0;</font></p>
            </blockquote>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; " align="left">
            <font face="宋体">&nbsp;&nbsp;&nbsp; 完成变换矩阵的定义和设置后,用如下代码:</font></p>
            <blockquote>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; " align="left">
            <font face="宋体">m_matOrigin = m_matOrigin * Trans;</font></p>
            </blockquote>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体">便可完成m_matOrigin矩阵和Trans矩阵的乘运算。显然,在此的变换矩阵是完成点集沿x轴的对称变换。</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体">&nbsp;&nbsp;&nbsp; 便可创建一个名为m_matOrigin的矩阵类对象。值得注意的是,由于采用的是无参构造函数,所以并未分配用于存储矩阵各个元素内存,因此,还应调用CMatrix类的成员函数:<br>
            	Create(<font color="#0000FF">int</font> RowNumber,
            <font color="#0000FF">int</font> ColumnNumber)<br>
            创建RowNumber×ColumnNumber的矩阵内存堆,此后才能进行矩阵单元的访问。</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体">&nbsp;&nbsp;&nbsp; 与此类似,对于矩阵类中其它的应用,请大家自行学习,在此不再冗述。</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <b><font face="宋体" size="5"><a name="004"></a>D.4 小</font></b><font face="宋体"><font size="5"><b>结</b></font></font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
            <font face="宋体">&nbsp;&nbsp;&nbsp; 
            矩阵的运算是图形学中非常很重要的基础,在图形的变换、图形显示、投影变换中有着非常广泛的应用。矩阵类CMatrix的设计只是面向对象C++语言的一个简单的应用,在此未能用到对象C++语言的所有功能,希望大家在学习和使用中能够进行多方面的测试,并能多提建议和意见,以便我们能进一步对其进行完善。</font></p>
            <p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
             </p>
            <p style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 150%" align="center">      
            <font size="-2">
                    <a href="../../main.html">[返回]</a></font></p>     
            <p style="LINE-HEIGHT: 150%"> </td>     
            <td height="937" width="5%" style="border-left-style: none; border-left-width: medium">     
            <p style="line-height: 150%"> </td>     
          </tr>     
</tbody>     
        </table>     
        </td>     
      </tr>     
</tbody>     
    </table>     
    <p style="line-height: 150%"> </p>     
    <p style="line-height: 150%"> </td>     
  </tr>     
</table>     
     
<hr color="#00007b" size="1" width="80%" align="center">     
     
<p align="center" style="line-height: 150%"><font size="2">西北农林科技大学信息工程学院<br>     
Copyright &copy; 2000-2002</font></p>       
</div>       
</body>       
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -