QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
9天前
查看: 4415|回复: 5
收起左侧

[讨论] 水泵叶线画法

[复制链接]
发表于 2009-5-22 13:57:39 | 显示全部楼层 |阅读模式 来自: 中国江苏苏州

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

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

x
如图,中间红色线与内圆切线夹角为27度,与外圆切线夹角为45度,随R增大,夹角均匀增大,求其曲线画法!
1111.JPG
发表于 2009-5-23 15:00:45 | 显示全部楼层 来自: 中国辽宁营口
  1. % E' H: s" O7 T& P, g' W( L
  2.     Dim Dbl最小半径 As Double, Dbl最大半径 As Double, Dbl最小夹角 As Double, Dbl最大夹角 As Double
    + O0 M6 E( l$ z: {2 s
  3.     Dim Lng样条曲线拟合点数量 As Long, Lng相邻拟合点间计算分段数量 As Long
    ; r# {/ P0 Y) f0 c
  4.     Dim Obj圆 As AcadCircle, Obj直线 As AcadLine, DblArr圆心(2) As Double, Var点 As Variant. q8 t- D6 [6 M- ]" z- }! ?1 B" I0 N
  5.     Dim Lng拟合点循环变量 As Long, Lng计算分段循环变量 As Long, Dbl夹角 As Double: l* M2 y1 E5 p3 x) [5 d6 x
  6.     Dim DblArr样条曲线拟合点() As Double, DblArr样条曲线起点切向(2) As Double, DblArr样条曲线端点切向(2) As Double
    . t9 H$ H+ ~. a& }4 k" ]
  7.    
    - b5 r3 R& [9 n4 i. u$ \3 c# _
  8.     '已知条件1 S/ T- A4 x! C% J& m' L( z' K
  9.     Dbl最小半径 = 250: Dbl最大半径 = 700: Dbl最小夹角 = 27: Dbl最大夹角 = 457 H: V0 v/ Z6 E; I% B2 Z+ E( G9 ~
  10.    
    1 B8 l( X/ Y2 d( P% i; X3 k
  11.     '设定曲线拟合点数量,通常不大于500,可根据情况自行更改  s$ q/ Z' G3 w5 M  ~- o
  12.     Lng样条曲线拟合点数量 = 1014 |- ?  V# @' b
  13.     '设定相邻拟合点间计算分段数量,可根据情况自行更改$ Q7 |! s) b; c' s5 s& {4 z
  14.     Lng相邻拟合点间计算分段数量 = 50
    ) h1 _, N: `/ n4 T, |
  15.     '数值越大,曲线精度相对越高,但运行时间越长8 Q9 v$ }+ X$ X$ `. a1 Q' Z+ @$ e
  16.    
    - K) q7 D4 B, N( K' ?
  17.    
    ! f) _0 V; X" J9 y; S
  18.     . K7 P7 Y% O4 \8 N5 B) w
  19.     '按拟合点数量重定义数组+ r/ J5 A* e' c& l, Z$ H9 I
  20.     ReDim DblArr样条曲线拟合点(Lng样条曲线拟合点数量 * 3 - 1)( x& u1 _+ O6 `
  21.     & d- F* m3 _. N) Y9 k* w
  22.     With ThisDrawing
      }( y8 U. u$ q6 I
  23.    
    * [$ V+ D% z+ z$ f& c" [+ k9 z
  24.         '以坐标原点为圆心,最小半径为半径画一个辅助圆,其半径做为变量在以后计算中还要逐步更改
    . G4 d' t" h3 H- I
  25.         Set Obj圆 = .ModelSpace.AddCircle(DblArr圆心, Dbl最小半径)* J- ~; |0 [3 D
  26.         
    ; e4 w' d  t' u2 B: E
  27.         '复制圆,做为结果显示
    , O' i3 c/ x! q3 d0 [' m8 z
  28.         Obj圆.Copy6 d, D# A1 _" M) J- x: E( X1 Z
  29.         
    5 {7 F, ~  v$ |  f( ]) T& ]
  30.         '圆心右侧最小半径长度处为曲线起点7 P& ]& t2 p$ c5 y9 g$ l
  31.         Var点 = .Utility.PolarPoint(DblArr圆心, 0, Dbl最小半径)
    : j, Q4 Y! @% Q7 v
  32.         
    , A- }* l$ _4 F2 `4 i5 g& g
  33.         '记录曲线的第一个拟合点(起点)坐标
    ) a1 q& x2 {% p8 e) y8 n9 H2 y: y4 O
  34.         DblArr样条曲线拟合点(0) = Var点(0): DblArr样条曲线拟合点(1) = Var点(1)
    : V9 e, F$ X1 z
  35.         
    9 _5 q: c3 O- k4 Y6 i- c% Z
  36.         For Lng拟合点循环变量 = 0 To Lng样条曲线拟合点数量 - 2
    0 n, f/ J, [. l" h! p
  37.             For Lng计算分段循环变量 = 1 To Lng相邻拟合点间计算分段数量5 _5 z( x- N! n3 i7 [7 v+ V
  38.             
    . m7 N: t& G3 ?0 ]
  39.                 '按半径计算夹角% u, H& v; k3 h$ s, e+ G
  40.                 Dbl夹角 = (Obj圆.Radius - Dbl最小半径) / (Dbl最大半径 - Dbl最小半径) * (Dbl最大夹角 - Dbl最小夹角) _0 ?; M+ ?* k9 ~' S/ h
  41.                   + Dbl最小夹角
    3 p6 Z" D9 p" E. T. a% z
  42.                 3 C2 g& q* _+ o: h% r+ j- J; o
  43.                 '以曲线上一个计算点为基点,用极坐标方法在规定角度和适当长度(按500,保证与圆相交)取点
    % o: D0 \0 B) l" p
  44.                 '以曲线上一个取样点为起点,上面取到的点为端点画辅助直线
    6 U+ q. W" e: ?5 S+ q
  45.                 Set Obj直线 = .ModelSpace.AddLine(Var点, _
    9 U% C& B4 x- A7 D5 S6 ?( y& N
  46.                   .Utility.PolarPoint(Var点, _
    2 T: A+ e3 d9 [$ L
  47.                     .Utility.AngleToReal(90 - Dbl夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点), 500))# b* a- L" n' J' b3 H3 d4 W
  48.                             8 c& @( f7 L! T) n+ e$ R
  49.                 '辅助圆半径增大一个增量单位
    1 }3 V0 N2 R9 @" m
  50.                 Obj圆.Radius = (Lng相邻拟合点间计算分段数量 * Lng拟合点循环变量 + Lng计算分段循环变量) _
    ) Z) @2 b& a% q
  51.                   / ((Lng样条曲线拟合点数量 - 1) * Lng相邻拟合点间计算分段数量) _; H6 N  v0 m2 i. N/ [
  52.                   * (Dbl最大半径 - Dbl最小半径) + Dbl最小半径
    3 s1 E/ W$ `; s0 ^( z1 [
  53.                
    ' n5 P2 W, n: g! o! B
  54.                 '获得辅助直线与辅助圆的交点
    , a* S3 f, d7 l
  55.                 Var点 = Obj直线.IntersectWith(Obj圆, acExtendNone)
    6 P  T& C$ F& e$ j3 r7 I8 W, V0 ^
  56.                 8 A  v( e; O! A. S' v8 W' o
  57.                 '删除辅助直线; \% |/ G: x" V# A
  58.                 Obj直线.Delete                        
    9 }/ _# P! O( N2 U1 _! X4 v
  59.             Next
    $ [1 E" H% s0 _/ [5 f& z( c8 q
  60.             
    7 s# }2 |4 B' I8 l; P6 A" F
  61.             '记录拟合点坐标: x: b  V: G% w# H/ C
  62.             DblArr样条曲线拟合点(Lng拟合点循环变量 * 3 + 3) = Var点(0): DblArr样条曲线拟合点(Lng拟合点循环变量 * 3 + 4) = Var点(1)9 k) R) U' ^8 P# L3 D
  63.         Next4 Q( ~3 L, h' f
  64.                   `! X7 Q9 g! j. C+ H1 n! W
  65.         '计算起点切向
    , y+ U2 c# t: r3 X- ]
  66.         DblArr样条曲线起点切向(0) = Cos(.Utility.AngleToReal(90 - Dbl最小夹角, acDegrees))- ~" ]$ u4 s. P( f
  67.         DblArr样条曲线起点切向(1) = Sin(.Utility.AngleToReal(90 - Dbl最小夹角, acDegrees))' z2 L& T  V, S8 ?
  68.         
    1 q8 w: w4 @: Y& Q- K6 D
  69.         '计算端点切向
    & P$ C' ^6 @6 G$ d  N# i- a2 T! M& I& _
  70.         DblArr样条曲线端点切向(0) = Cos(.Utility.AngleToReal(90 - Dbl最大夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点))9 O# _. X* \  B; y
  71.         DblArr样条曲线端点切向(1) = Sin(.Utility.AngleToReal(90 - Dbl最大夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点))
    # F0 C8 P7 \5 s6 n  M3 [: N1 n
  72.         
    8 F8 l  ~( W" P2 K% Q. c
  73.         '画曲线' V0 ?& B8 V/ c' w* w( A+ O
  74.         .ModelSpace.AddSpline DblArr样条曲线拟合点, DblArr样条曲线起点切向, DblArr样条曲线端点切向1 I; y7 O" q& E4 D- g+ G
  75.     End With; t: U' c- m+ j" ~7 l$ L3 j& \
复制代码
 楼主| 发表于 2009-5-24 10:13:07 | 显示全部楼层 来自: 中国江苏苏州
首先非常感谢版主的解答!
2 ^( J9 x6 Q, C' I/ `! e如果改成多段线,该代码又如何修改呢?
发表于 2009-5-24 14:45:56 | 显示全部楼层 来自: 中国辽宁营口

回复 3# benwang 的帖子


  1. & s4 I4 ^2 E6 `
  2.     Dim Dbl最小半径 As Double, Dbl最大半径 As Double, Dbl最小夹角 As Double, Dbl最大夹角 As Double
    ! L9 E( e% F$ l, P! q
  3.     Dim Lng优化多段线顶点数量 As Long, Lng相邻顶点间计算分段数量 As Long
    % B% j; [" H* M: d5 D1 J9 j
  4.     Dim Obj圆 As AcadCircle, Obj直线 As AcadLine, DblArr圆心(2) As Double, Var点 As Variant# g) f& h8 t  p" p; W, g5 W
  5.     Dim Lng顶点循环变量 As Long, Lng计算分段循环变量 As Long, Dbl夹角 As Double, G  Q8 L8 V# J% A
  6.     Dim DblArr优化多段线顶点() As Double# ^$ X* k0 p& r- x( H
  7.     3 _1 B) u+ X' y# ^( d2 j$ C, n
  8.     '设定优化多段线顶点数量,通常不大于500/ Z" I6 T6 p6 r$ f( m7 a
  9.     Lng优化多段线顶点数量 = 101
    8 r# H( |9 I% k' C
  10.     '设定相邻顶点间计算分段数量# A7 s9 z" o- u5 x  \+ {# V
  11.     Lng相邻顶点间计算分段数量 = 5& J  h3 I0 j5 f
  12.     '数值越大,优化多段线精度相对越高,但运行时间越长; i$ o' X, C8 p1 l
  13.     " f7 W+ ~8 P2 m
  14.     '按顶点数量重定义数组
    . ~9 U: _8 S& d* Q, {* l8 l
  15.     ReDim DblArr优化多段线顶点(Lng优化多段线顶点数量 * 2 - 1)4 r& h0 O! C& R1 U' s
  16.    
      ]/ K7 p( X; a! b
  17.     '已知条件6 f/ b" F+ |: L  M. C% K: Y; Z
  18.     Dbl最小半径 = 250: Dbl最大半径 = 700: Dbl最小夹角 = 27: Dbl最大夹角 = 45& w# D4 b" [0 }
  19.    
    # w) h. U. a; D
  20.     With ThisDrawing. F, |9 P( R. {* A4 F8 o3 a1 R
  21.     9 D6 C2 ~! F* f
  22.         '以坐标原点为圆心,最小半径为半径画一个辅助圆,其半径做为变量在以后计算中还要逐步更改* P# g, t* [3 c$ T+ U
  23.         Set Obj圆 = .ModelSpace.AddCircle(DblArr圆心, Dbl最小半径)6 ~+ E# y4 _- Q
  24.         
    % @& s. R' h& h5 }9 \
  25.         '复制圆,做为结果显示7 Z: |$ g  Y: `& ^/ F: a! z
  26.         Obj圆.Copy
    # _% R$ w8 C" v# k
  27.         ; }, d2 a0 _5 h+ u% a, i4 V
  28.         '圆心右侧最小半径长度处为优化多段线起点
    , U5 T& R5 M. e, J; m
  29.         Var点 = .Utility.PolarPoint(DblArr圆心, 0, Dbl最小半径)4 m- D* x8 X% J% Z/ P; B: d
  30.         
    & k7 D, z6 i9 P) ^
  31.         '记录优化多段线的第一个顶点(起点)坐标
    + e6 n, a5 W* |! o5 T# x- f
  32.         DblArr优化多段线顶点(0) = Var点(0): DblArr优化多段线顶点(1) = Var点(1)
    & J7 ?9 L  U5 v
  33.         
    & t( E( S" P- a& A
  34.         For Lng顶点循环变量 = 0 To Lng优化多段线顶点数量 - 2
    # t9 N4 V) k- m; h
  35.             For Lng计算分段循环变量 = 1 To Lng相邻顶点间计算分段数量
    ' ?& _* X; p% G: c
  36.             1 H9 c( f  F7 a' P
  37.                 '按半径计算夹角
    # y* S( F/ `. R& I0 \  j- r
  38.                 Dbl夹角 = (Obj圆.Radius - Dbl最小半径) / (Dbl最大半径 - Dbl最小半径) * (Dbl最大夹角 - Dbl最小夹角) _" X9 m( f) |$ ^  ]; @5 p
  39.                   + Dbl最小夹角
    ( @" h7 A7 x, {. V
  40.                 # E, k& ~2 [) X, y. W7 @  k
  41.                 '以曲线上一个计算点为基点,用极坐标方法在规定角度和适当长度(按500,保证与圆相交)取点
    6 L5 ?% P2 U" O; G
  42.                 '以曲线上一个取样点为起点,上面取到的点为端点画辅助直线
    ; j: f6 e) u, F6 X. U
  43.                 Set Obj直线 = .ModelSpace.AddLine(Var点, _
    0 c3 E- @$ G  n, f$ P8 a
  44.                   .Utility.PolarPoint(Var点, _+ L6 ]* W5 c+ I( ?8 c* a. A: s' N
  45.                     .Utility.AngleToReal(90 - Dbl夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点), 500))2 e, s7 j9 O9 c$ _. v: U
  46.                            
    6 y! z  j, Y5 x- l
  47.                 '辅助圆半径增大一个增量单位
    ' S7 F* s' Y+ u8 q  x1 Z
  48.                 Obj圆.Radius = (Lng相邻顶点间计算分段数量 * Lng顶点循环变量 + Lng计算分段循环变量) _! t0 o. D& B- _+ X
  49.                   / ((Lng优化多段线顶点数量 - 1) * Lng相邻顶点间计算分段数量) _- K9 L! |3 r. X
  50.                   * (Dbl最大半径 - Dbl最小半径) + Dbl最小半径8 b2 t: S; n# Y- N8 w8 R9 y9 g* v
  51.                
    3 S9 t7 V8 H$ E9 B5 d
  52.                 '获得辅助直线与辅助圆的交点,即为本次循环要找的取样点
    ) I+ R! U1 X, x; Y+ [' g% [
  53.                 Var点 = Obj直线.IntersectWith(Obj圆, acExtendNone)
    ) o0 j; i1 k0 t8 V5 C: h+ ]
  54.                
    ' \# m: ?7 e/ ~" e0 ~( I- v, n
  55.                 '删除辅助直线: y/ X5 L8 ~8 I# j( q) L
  56.                 Obj直线.Delete  y, ^. m* h$ r& ^- b
  57.             Next
    ! `& q1 v. _- N9 d
  58.             + w+ Y& _3 r) Z3 Q. @/ u
  59.             '记录顶点坐标
    0 }3 v; Y) T6 P( w  d$ u4 v
  60.             DblArr优化多段线顶点(Lng顶点循环变量 * 2 + 2) = Var点(0): DblArr优化多段线顶点(Lng顶点循环变量 * 2 + 3) = Var点(1)
    6 I' E  Y4 B$ a5 T
  61.         Next
      [% }4 E7 G, S
  62.           f, z/ E1 S: v. }) @
  63.         '画多段线
    * @' L# d' ]  L& v( B
  64.         .ModelSpace.AddLightWeightPolyline DblArr优化多段线顶点
    ; x2 N2 G% i( _) T3 E6 A
  65.     End With
    8 C8 C3 }& a4 p" U( e8 \" k
复制代码
发表于 2010-1-5 19:56:04 | 显示全部楼层 来自: 中国湖北十堰
好东西啊  高手
发表于 2011-4-13 22:22:17 | 显示全部楼层 来自: 中国安徽芜湖
超感谢,我们老师让我们做这个FLUENT,是一个二维离心泵的模拟,但是资料书,里面只是说由四段圆弧构成,就没有了,不知道怎么画!
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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