QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 2617|回复: 4
收起左侧

[讨论] 简单的画图问题(改进的正弦函数)

[复制链接]
发表于 2008-1-27 01:10:37 | 显示全部楼层 |阅读模式 来自: 中国江苏无锡

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
估计大家都能用Autocad画出正弦函数,我现在的要求是用VBA画出正弦函数,幅值为1,区间为【0,2Pi】,图形起始点为(0,0)。& g" J% s0 l' j; r1 _

" Y0 B& g$ O2 j) t# I) \; Q我的源码如下附件。
7 O0 [) F. t3 }/ p& y9 u我的环境:XP+AutoCad2004;
- x7 f8 {! Z7 H& O3 M( [( f关于怎么创建宏,参见我的帖子:
6 ]! I+ z" v& a* G/ e* G0 [http://www.3dportal.cn/discuz/viewthread.php?tid=4393061 q' Q# m$ r- k2 S
( `) z4 Y- A2 \  @( V' B% o: F
[ 本帖最后由 auluolal 于 2008-1-27 21:53 编辑 ]

正弦函数.pdf

105.53 KB, 下载次数: 22

 楼主| 发表于 2008-1-27 01:38:25 | 显示全部楼层 来自: 中国江苏无锡
首先,谢谢4楼!
( B( o, w% t$ Z; ?. @' U为什么不贴源码?
$ N. ~8 G) T% Y3 }4 |2 J因为我多数时间不能直接上网,只能在线下编辑文件,并且我用Latex编辑文件,不能直接贴的,因此上附件,给大家造成不便,还请谅解!: M8 z, `4 r* F# r1 X
关于你修改的程序,个人感觉很不错,谢谢了!0 ]7 p. v3 h3 l
但是,你提到初始切角可以省略,我的原意是将Addspline函数的参数讲的比较彻底点。而你用的是些小技巧
' {$ h, ?- A3 d另外你更改的程序正是我占楼的原因:)
  N4 Q6 B# p: [& t$ m! z简单的正弦函数大家看来会了,现在我加点要求!
: H5 F' r# B& W1、起始点要能根据要求随时改变
, f8 N( v! f" ^1 q! i6 W2、幅值要能根据要求随时改变
% O& z/ c! P* o! E6 Y3、所要画的图形的周期要能改变。
8 I7 t% `6 V4 b  Q% w' m上述要求用两种方法实现,1、靠Autocad的命令输入框实现,2、靠输入窗体实现
4 m' s/ R1 p; m& o% U0 b. N$ Y:)' X& v' e4 H7 C: B# O* v0 @
0 n0 w1 J" e, D
[ 本帖最后由 auluolal 于 2008-1-27 11:30 编辑 ]
发表于 2008-1-27 05:13:02 | 显示全部楼层 来自: 中国湖南常德
楼主的VBA编的好啊,学习了~~
发表于 2008-1-27 09:48:47 | 显示全部楼层 来自: 中国
楼主为什么这么小气,不直接把源码帖出来?( O8 E# B' d- R0 a7 A" F3 M- {$ X
以下是楼主的源码(越俎代疱了)。
/ a2 @9 Y% R- }7 q% n7 K6 `) W6 h" x
Sub zxhs()
, j9 `# {5 R) N! s- j: W& D  Const Pi As Double = 3.14159265358979 '声明常量π) |8 w0 h. ~. s: [+ ^$ X
  Dim TemPArray(0 To 188) As Double '定义要画的点的数列4 o$ ?' E- W! C* g# b3 \
  Dim startTan(0 To 2) As Double '定义初始点的切角0 v2 h  V$ }% ]; y; y
  Dim endTan(0 To 2) As Double '定义终结点的切角
$ ^. g4 j$ y% Q' s' G8 `2 f- W* C  Dim i As Double$ b5 ]/ c$ @$ R
  For i = 0.1 To 2 * Pi Step 0.1 '开始循环+ t& i) K9 y  B8 m5 Q' a2 S8 Y( C$ n
    TemPArray(i * 30) = i
) G* c3 h6 \6 b) z+ s. r, L5 b    TemPArray(i * 30 + 1) = Sin(i)
, ^. P# j+ L6 P+ d6 c    TemPArray(i * 30 + 2) = 0: x/ m: B2 A  z4 `" Q/ K7 j
  Next i/ a8 X9 H+ x( N3 H& f4 C
  startTan(0) = 1: startTan(1) = 1: startTan(2) = 01 Z9 z$ x  u* B9 o8 @# P9 y6 S
  endTan(0) = 1: endTan(1) = 1: endTan(2) = 0& m8 e3 |, U6 k4 h' t! h  d6 Y
  Call ThisDrawing.ModelSpace.AddSpline(TemPArray, startTan, endTan) '画曲线1 l4 N* d: H8 R1 x1 f
End Sub
) P* x* C# Z9 g( Q. ^. ~' ^: J  ]  a: y  l/ G
应该说,楼主的程序很不错,美中不足的是还有一点缺陷可能是被楼主忽略了:画出的曲线的最后一个拟合点的横坐标不是2π,而是6.2。# W/ w, X. {. `1 H2 `) v& p! ?
% D4 S& z6 v; }; @' M
把楼主的程序修改了一下:
3 j6 j6 i; s8 I) W! ]- J
* w( @8 |' p, `/ z/ RSub zxhs()
, R" j1 a2 B& y  Const Pi As Double = 3.14159265358979
! U2 k6 n& [" |0 {! T  Dim TempArray() As Double'拟合点坐标使用固定数组需要先计算拟合点数量,而且今后想修改循环条件的时候,还要重新计算,重新定义数组,有点麻烦,不如使用动态数组,这样将来修改循环条件时就不必去关心到底有多少个拟合点。
4 l3 v3 g$ E1 B  U1 |: g* d: ?  Dim startTan(0 To 2) As Double
$ g7 V# F4 z; j; E  Dim endTan(0 To 2) As Double- S2 g, O5 `, c# v
  Dim A As Double
* h4 }3 |  t7 h4 `  ReDim TempArray(5)4 D2 {1 p8 `% h8 B
  For A = 0.1 To 2# * Pi Step 0.1
# Y2 j, x# Y! e" I5 i2 Z; k* Y/ B    TempArray(UBound(TempArray) - 2) = A/ S/ D1 E7 {2 V) j- K
    TempArray(UBound(TempArray) - 1) = Sin(A)
) d$ j, _, I/ a$ H/ A    ReDim Preserve TempArray(UBound(TempArray) + 3)
/ l0 T/ |6 m; A6 n9 X3 Y) ^  Next
0 O' W) i! |- }- H  TempArray(UBound(TempArray) - 2) = Pi * 2#" e$ R) Q/ x- y: n
  TempArray(UBound(TempArray) - 1) = Sin(Pi * 2#)
4 U- k# `) ^  X  'startTan(0) = 1: startTan(1) = 1: endTan(0) = 1: endTan(1) = 1'这一行......似乎意义不大,因为拟合点已足够多了,还需要指定端点切向吗?。
) Q) l8 V9 X# ]  O, V+ h& F  ThisDrawing.ModelSpace.AddSpline TempArray, startTan, endTan) K4 X: k1 {0 }" l
End Sub
* `/ b! X# o! h# C; j% n8 c3 _4 r) w
纯属探讨,不当之处还请楼主海涵。

评分

参与人数 1三维币 +5 收起 理由
★新手★ + 5 技术讨论

查看全部评分

 楼主| 发表于 2008-1-27 21:53:09 | 显示全部楼层 来自: 中国江苏南通

改进的正弦函数

对于2楼的要求,我采用了界面输入参数的方法编了程序。
1 q- u2 f5 f" h: v4 `2 b参见附件
! P9 a% ~1 q; x- R3 N2 ]6 n其中PDF文件是我认为要注意的地方,DWG文件为源码及运行程序。

改进的正弦函数.pdf

100.76 KB, 下载次数: 13

改进的正弦曲线.rar

14.06 KB, 下载次数: 16

评分

参与人数 1三维币 +5 收起 理由
★新手★ + 5 技术讨论

查看全部评分

发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

快速回复 返回顶部 返回列表