2024年1月9日发(作者:曹县2023年考试数学试卷)

利用PPT-VBA和CAD的3dmesh命令绘制数学曲面

最近一直用ppt-vba发展绘图方法,二维方法很容易就搞定了,但是三维方法却很难,只是做了一些初探。一个偶然的机会在网上看到了“利用Matlab通过Excel向CAD结合绘制数学曲面”和“直接用Excel向CAD传递数据”,我发现它们有共同的地方都是要经过Excel向CAD传递数据,与其这样还不如直接用excel-vba计算数据。经过几次改进,程序与Excel无关了(要经过一个txt文件保存数据),干脆放在ppt-vba里来完成正好完善我的绘图方法。

1 PPT-VBA生成的数据

(1) 生成iMax×jMax维行数组,其中以“,”隔开x、y和z坐标值

(2) 在桌边生成文件

(3) 程序如下

Option Base 1

Const pi# = 3.142

\'***********************************************************************************

\'*******************计算数据,由x、y和z的两个参数定义*******************

\'***********************************************************************************

Function xF#(u#, v#)

xF = u * Cos(v)

End Function

Function yF#(u#, v#)

yF = u * Sin(v)

End Function

Function zF#(u#, v#)

If u = 0 Then

zF = 10

Else

zF = 10 * Sin(u) / u

End If

End Function

Sub ToCAD3DMesh()

Dim u#, v#, uX#, uD#, vX#, vD#

Dim x#(), y#(), z#(), Data$()

Dim i%, j%, iMax%, jMax%

\'*******************************************************************************

\'*****************************定义参数u和v的范围*************************

\'********************定义初始和次要网面轴线的顶点数********************

\'*******************************************************************************

uX = 0: uD = 3 * pi

vX = -3 * pi: vD = 3 * pi

iMax = 21

jMax = 41

\'*******************************************************************************

\'*******************************************************************************

ReDim x#(iMax * jMax, 1), y#(iMax * jMax, 1), z#(iMax * jMax, 1),

Data$(iMax * jMax, 1)

For i = 1 To iMax

For j = 1 To jMax

u = (i - 1) * (uD - uX) / (iMax - 1) + uX

v = (vD - vX) / (jMax - 1) * (j - 1) + vX

x((i - 1) * jMax + j, 1) = xF(u, v)

y((i - 1) * jMax + j, 1) = yF(u, v)

z((i - 1) * jMax + j, 1) = zF(u, v)

Data((i - 1) * jMax + j, 1) = x((i - 1) * jMax + j, 1) & \",\" & y((i - 1) *

jMax + j, 1) & \",\" & z((i - 1) * jMax + j, 1)

Next j

Next i

SaveAs3DMesh_Txt iMax, jMax, Data

MsgBox \"CAD_3DMesh数据已导出,请在桌面查看数据文件\" &

Chr(13) & _

\"初始网面轴线的顶点数为\" & iMax & Chr(13) & _

\"次要网面轴线的顶点数为\" & jMax, vbInformation, \"导出CAD绘图数据\"

End Sub

Sub SaveAs3DMesh_Txt(iMax%, jMax%, Data$())

Dim i%

Dim ObjShell, Desktop_Path \'获取本台机子桌面路径

Set ObjShell = CreateObject(\"\")

Desktop_Path = lFolders(\"Desktop\")

Open Desktop_Path & \"\" For Output As #1

For i = 1 To iMax * jMax

Print #1, Data(i, 1)

Next

Close

End Sub

2 CAD的3dmesh用法(笔者用的是中望CAD的教育版)

(1) 输入3dmesh命令

(2) 输入初始网面轴线的顶点数(2到256之间):iMax

(3) 输入次要网面轴线的顶点数(2到256之间):jMax

(4) 复制桌面上的ShuJu文件到顶点(1,1)后面,数据加载完后自动绘图

(5) 在“视图三维视图”选择一种观察方式

(6) 保存时采用Windows截图要比bmpout命令好(还有更好的,那就是渲染到文件)

3 如图

笔者以前的博文《用Excel绘制数学曲面》也可作为参考,只是那比较粗糙,简单的可以用一下。


更多推荐

数据,方法,文件,桌面,绘图,网面,曲面