|
在进行产品设计时,经常会涉及到公式曲线、曲面的绘制,而一般的设计人员使用的方法比较复杂,不利于掌握和使用。本文介绍了一种结合MATLAB和Excel在AutoCAD中精确绘制各种公式曲线、曲面的技巧,而通过这种方法绘制的曲线、曲面不是插图,而是实际绘出的AutoCAD图元。 , H1 e7 d. ?4 u2 K3 E. P3 _0 B
g2 I7 q. G2 {3 [; g
一、引言
$ w' m* Y8 L0 f# n( y$ Z7 }6 I
+ M' C: H/ x4 l o用AutoCAD绘制平面公式曲线(如渐开线、心形线)、空间公式曲线(如螺旋线)以及公式曲面(如马鞍形曲面)是比较困难的,一般情况下,需要用AutoCAD开发程序编程,但多数程序比较复杂,尤其是公式曲面的绘制程序,需要多层嵌套循环,复杂且运行效率低。
2 S& ]. N' `' {' `: I& Y
% d! Y; m3 L/ L) A- V/ c快速且精确地绘制各种公式曲线、曲面恰恰是MATLAB的长项,但是MATLAB绘制的图形却不能直接用于机械零件设计。其中非常关键的一点,就是MATLAB绘制的曲线、曲面分别是由有限个点连接而成的折线和空间网格构成的,而在AutoCAD中绘制的曲线、曲面也是如此。因此,只需要把在MATLAB中绘制的公式曲线、曲面上所有的点坐标数据都提取出来,若能让AutoCAD正确识别,那么我们就可以在AutoCAD中精确地绘制这些曲线、曲面了。5 D# }2 m7 e2 _
" g3 y. |9 O( l本文介绍了一种快速、精确地绘制各种公式曲线、曲面的方法,即在AutoCAD中通过调用经过Excel处理的MATLAB数据实现。; K3 ~# @. z/ B0 `, A
. \2 z0 D+ k& K: ]- t
二、AutoCAD和MATLAB的特点+ n$ S0 |$ q) A6 W
, r+ ]' n# U6 _MATLAB是非常优秀的科学计算、信号处理以及图形显示软件,它有自身的语言,与其他高级语言相比,MATLAB提供了一个人机交互的数学环境,并以矩阵作为基本的数据结构,可大大节省编程时间。另外,MATLAB不仅语法规则简单,容易掌握,调试方便,还可以存储中间结果,这使得MATLAB既可以快捷、精确地绘制各种公式曲线、曲面,又可以很方便地提取中间数据。8 t7 F( N, E0 [1 O' Q2 P- e; L
5 q7 @( O! Z7 p) y, W
在工业设计领域,AutoCAD不仅被广泛应用于平面绘图,也可以用于三维建模,但在曲线、曲面造型方面不是很理想。它是开放型的人机交互系统,有多种语言接口,与外界的数据交换很灵活,这些特点使得它与MATLAB的结合成为可能。" D* U/ Z( X$ t4 V/ j% R7 d# M0 g" }
- U8 Z5 E0 v' r- C( c+ q7 P2 I三、结合MATLAB在AutoCAD中绘制曲线、曲面的原理及方法- [, p6 w1 q! }# F9 d0 u }
" q: Z7 _* s1 ]1 i
1.原理
$ }( z4 K( P& [; `( [6 m1 C7 Y
3 w( r- C- d4 ^) YMATLAB中的矩阵数据虽然很容易提取,但由于它不是AutoCAD能识别的格式,因此不能直接被AutoCAD调用,需要先用Excel对从MATLAB中提取的数据进行编辑,转换成AutoCAD可以识别的格式,才能在AutoCAD中绘出曲线、曲面。
9 }9 Z8 _9 } l6 V! H9 l. x! l7 r4 m L) m( X) M' i/ {
9 U* m5 [' G# h: v/ @& w H; ~2.方法
* p4 x0 e0 X* y) a Q, r9 v9 B" k. {5 X
由于在AutoCAD中绘制平面曲线、空间曲线和曲面的绘制命令不同,且数据结构也不同,因此结合MATLAB的绘制方法也稍有区别。这种绘制方法的关键就是把数据格式转换成AutoCAD的绘制命令所需要的数据格式,只要熟悉AutoCAD的数据结构,就可以举一反三。
' l9 J6 _4 {( r# z5 I/ U; x5 ^7 o) M* [4 W2 _
在这三者中最复杂的是绘制公式曲面的数据结构,下面就以一个马鞍形曲面的绘制为例来介绍这种方法,( s" R( f' F7 Z" B# _( f
) a$ t- e0 T& F5 X7 k$ u( J(1)利用MATLAB得到公式曲面数据
! T: b8 ?! W* l
, q8 \* p U3 y2 h" E1)在MATLAB中绘制出曲面
; [5 [' N: R5 t7 \% R% X1 v
$ p; |# O" u" {& R9 {& }" U- {5 H在MATLAB中输入如下命令:
' N2 |# A# k7 E5 r
6 V+ y4 f' t7 L. N' F% r% \[th,r]=meshgrid((0:5:360)*pi/180,0:.05:1); %在极坐标系下设置一个73×21的网格矩阵,即圆周方向分为73份,半径方向分为21份,总共分了1533个点,节点越多,图形越精确 %
4 x+ ?3 r; C4 s7 x& b1 ]- D8 J9 d* {9 g$ t! H1 F5 Z
[X,Y]=pol2cart(th,r); %转化为笛卡儿坐标系%! ~5 b* L, q' M J' q; v
0 @0 ]8 }3 p- \/ g6 F8 z" ?& W. Z7 O4 q
Z=X i.*Y;
1 L* ~2 i5 d) _ j& w
" G' A. e9 e/ A* mF=abs((Z.^4-1).^(1/4));
/ x% u* a; p5 T. [" N j
5 |$ z c4 ~7 {: Z( M, r) Ysurf(X,Y,F); %显示曲面的立体图形%- U5 S$ I7 u* b) [7 C+ k
f: O+ u3 V5 e- _: U. hS=[X( Y( F( ]; %把X、Y、F 3个矩阵中的数据存储到矩阵S中%0 [" n5 U' @. d) Z
4 }6 b* K$ c: u5 E1 _: k
, _$ O: L7 A9 S2)提取点坐标0 s0 o3 T& ?7 ~
- K3 i+ k3 w8 |5 r1 V
在MATLAB的“Workspace”窗口中可以看到S是个1533×3的矩阵,即表示有1533个点的坐标,每个点有三个坐标参数,双击打开S,则弹出“Array Editor:S”窗口,窗口表格中的数字就是矩阵的数据。0 W* Y9 H0 W' W H6 b' e' ^
3 n) E4 ]/ ?( v" m y
先将全部数据复制到剪贴板,下面用Excel对坐标数据进行数据处理。
# g, f! I* J, x$ z0 M n2 N4 J& V* `- ?7 H& T& A$ U- F
5 m5 X! _/ c/ w( g0 A$ K# H
(2)利用Excel编辑曲面数据
. Z/ U2 G t, ^* n' R6 q
( @' X: D* n+ b' z2 x打开Excel,将保存在剪贴板里的数据粘贴到Excel表格里,得到三列数据,每列1533行。其中,A、B、C列中的数据分别是曲面上各点的笛卡儿坐标系中的X、Y、Z值,而在AutoCAD中的笛卡儿坐标系的点坐标的输入形式为“x,y,z”,所以我们需要对A、B、C列的数据间加个“,”。3 k1 K/ w9 l( h2 E- R1 }& s% O
2 K/ {* L5 J- g! G0 n
方法是:点选中D1(D表示第D列,1表示第1行)格,在公式栏里输入“=A1 |
|