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

📄 subject_18392.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:18392 发表者:mini 发表日期:2002-10-20 13:21:36
<br>主题:菜鸟的愿望———读懂程序篇
<br>内容:三维变换的程序。有几点疑问。<BR>void&nbsp;&nbsp; CMyClass::Calculate(array2d B) B是怎么定义的。<BR> XT[i] =3*X[i]*B[1][1]+3*Y[i]*B[2][1]+3*Z[i]*B[3][1]+C[i]*B[4][1];为什么*3呢?<BR><BR>Calculate(A);&nbsp;&nbsp;A是什么?<BR><BR><BR>void&nbsp;&nbsp; CMyClass::ReadWorkpiece() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X[1] = 0;&nbsp;&nbsp;Y[1] = 0;&nbsp;&nbsp;Z[1] = 0;&nbsp;&nbsp;C[1] = 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X[2] = 45;&nbsp;&nbsp;Y[2] = 0;&nbsp;&nbsp;Z[2] = 0;&nbsp;&nbsp;C[2] = 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X[3] = 45; Y[3] = 37;&nbsp;&nbsp;Z[3] = 0;&nbsp;&nbsp;C[3] = 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X[4] = 0;&nbsp;&nbsp;Y[4] = 37;&nbsp;&nbsp;Z[4] = 0;&nbsp;&nbsp;C[4] = 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X[5] = 0;&nbsp;&nbsp;Y[5] = 37;&nbsp;&nbsp;Z[5] = 45;&nbsp;&nbsp;C[5] = 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X[6] = 0;&nbsp;&nbsp;Y[6] = 0;&nbsp;&nbsp;Z[6] = 45;&nbsp;&nbsp;C[6] = 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X[7] = 12;&nbsp;&nbsp;Y[7] = 0;&nbsp;&nbsp;Z[7] = 45;&nbsp;&nbsp;C[7] = 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X[8] = 30;&nbsp;&nbsp;Y[8] = 0;&nbsp;&nbsp;Z[8] = 14;&nbsp;&nbsp;C[8] = 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X[9] = 45;&nbsp;&nbsp;Y[9] = 0;&nbsp;&nbsp;Z[9] = 14;&nbsp;&nbsp;C[9] = 1;//省略<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X[22]= 60;&nbsp;&nbsp;Y[22]=40;&nbsp;&nbsp;Z[22]=50;C[22]=1;<BR><BR>}<BR><BR>/***************************************************<BR>* 此函数分别用于三个视图的投影变换,统一用变换后顶 *<BR>* 点的三个坐标计算公式求其坐标值。这三个公式是由点 *<BR>* 的齐次坐标乘以变换矩阵得来的。实际上每个视图投影 *<BR>* 只有二个非零坐标需要计算求得,而另一个坐标是零勿 *<BR>* 需计算。因此也可以根据三个不同视图的投影,分别采 *<BR>* 用其投影后的二个坐标计算式来求坐标值。函数中可用 *<BR>* 条件语句选择不同视图投影采用不同坐标计算式求值。 *<BR>***************************************************/<BR>void&nbsp;&nbsp; CMyClass::Calculate(array2d B)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReadWorkpiece();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 1;&nbsp;&nbsp;i &lt;= 22;&nbsp;&nbsp;++i )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT[i] =3*X[i]*B[1][1]+3*Y[i]*B[2][1]+3*Z[i]*B[3][1]+C[i]*B[4][1];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YT[i] =3*X[i]*B[1][2]+3*Y[i]*B[2][2]+3*Z[i]*B[3][2]+C[i]*B[4][2];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZT[i] =3*X[i]*B[1][3]+3*Y[i]*B[2][3]+3*Z[i]*B[3][3]+C[i]*B[4][3];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR>// 此函数求轴测投影后点的坐标值<BR>void&nbsp;&nbsp; CMyClass::MCalculate(array2d B)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReadWorkpiece();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ( int i = 1;&nbsp;&nbsp;i &lt;= 22;&nbsp;&nbsp;++i )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT[i] =3*X[i]*B[1][1]+3*Z[i]*B[2][1]+3*Y[i]*B[3][1]+C[i]*B[4][1];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YT[i] =3*X[i]*B[1][2]+3*Z[i]*B[2][2]+3*Y[i]*B[3][2]+C[i]*B[4][2];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZT[i] =3*X[i]*B[1][3]+3*Z[i]*B[2][3]+3*Y[i]*B[3][3]+C[i]*B[4][3];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 三个坐标计算公式由点的齐次坐标乘以轴测投影变换矩阵得来。<BR>}<BR>void CMyClass::DrawViewV(CDC* pdc,CRect rr)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;xx=rr.right/2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;yy=rr.bottom/2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Calculate(A);&nbsp;&nbsp;// 作主视图的投影变换<BR>&nbsp;&nbsp;&nbsp;&nbsp;moveto(xx-XT[1], yy-ZT[1],pdc);<BR>&nbsp;&nbsp;&nbsp;&nbsp;for ( int i = 2;&nbsp;&nbsp;i &lt;=22;&nbsp;&nbsp;++i )&nbsp;&nbsp;// 画出主视图<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lineto(xx-XT[i], yy-ZT[i],pdc);<BR>&nbsp;&nbsp;&nbsp;&nbsp;moveto(xx-XT[1], yy-ZT[1],pdc);<BR>&nbsp;&nbsp;&nbsp;&nbsp;lineto(xx-XT[4], yy-ZT[4],pdc);<BR>&nbsp;&nbsp;&nbsp;&nbsp;moveto(xx-XT[1], yy-ZT[1],pdc);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//省略<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>}<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:徐景周 回复日期:2002-10-21 13:31:50
<br>内容:可以在你的工程中查找一下array2d 这个类型定义,也可以直接选中array2d ,点鼠标右键,选菜单中的直接到定义处看看。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:mini 回复日期:2002-10-21 17:18:13
<br>内容:typedef&nbsp;&nbsp;double&nbsp;&nbsp; array2d[5][5];<BR>typedef 是什么&nbsp;&nbsp;&nbsp;&nbsp;<BR>void Calculate(array2d B);<BR>工程中没有array2d 的定义。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:^_^ 回复日期:2002-10-21 17:26:00
<br>内容:typedef是类型定义,就是用后边的类型表示前边的类型<BR>typedef unsigned char UCHAR了以后你就可以用UCHAR作为你的新类型,但实际就是unsigned char<BR><BR>typedef&nbsp;&nbsp;double&nbsp;&nbsp; array2d[5][5];<BR>应该就是定义了一个double的二位数组,长度是5*5<BR>然后你定义了array2d B,就可以访问b[0][0]~b[4][4]的数了,数据类型还是double的<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:mini 回复日期:2002-10-21 20:09:33
<br>内容:B 是怎么定义的。B[1][1]=?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:*** 回复日期:2002-10-21 21:05:02
<br>内容:B[1][1] 是 (2,2) row 2 , column 2 的元素<BR>这是两维数组啊,你把他想象成矩阵就可以了。<BR><BR> 找本 c 程序设计看看吧。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

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