QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 4471|回复: 5
收起左侧

[讨论] 水泵叶线画法

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

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

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

x
如图,中间红色线与内圆切线夹角为27度,与外圆切线夹角为45度,随R增大,夹角均匀增大,求其曲线画法!
1111.JPG
发表于 2009-5-23 15:00:45 | 显示全部楼层 来自: 中国辽宁营口

  1. 1 F/ i4 @  Q2 c1 t" z
  2.     Dim Dbl最小半径 As Double, Dbl最大半径 As Double, Dbl最小夹角 As Double, Dbl最大夹角 As Double
    6 g: @+ w( x/ c4 `# m
  3.     Dim Lng样条曲线拟合点数量 As Long, Lng相邻拟合点间计算分段数量 As Long+ S" X, z8 |& X/ }
  4.     Dim Obj圆 As AcadCircle, Obj直线 As AcadLine, DblArr圆心(2) As Double, Var点 As Variant+ T. ]9 X5 {* U; I3 I, k) X( M
  5.     Dim Lng拟合点循环变量 As Long, Lng计算分段循环变量 As Long, Dbl夹角 As Double! R7 G( U' @9 e: j$ ]; I# i, @
  6.     Dim DblArr样条曲线拟合点() As Double, DblArr样条曲线起点切向(2) As Double, DblArr样条曲线端点切向(2) As Double& e9 z$ S! {' F5 y) L# Y* f+ q# c
  7.    
    ) k. y3 {! F7 |6 l
  8.     '已知条件7 y, b9 w4 }+ A( @
  9.     Dbl最小半径 = 250: Dbl最大半径 = 700: Dbl最小夹角 = 27: Dbl最大夹角 = 45: I6 ~% z6 r9 O& G: F7 m7 q* p( |
  10.    
    0 j( e" `5 c3 Y7 B$ S
  11.     '设定曲线拟合点数量,通常不大于500,可根据情况自行更改
    $ y. P- S) r( y9 W; D
  12.     Lng样条曲线拟合点数量 = 101$ C! ?& r( L. _9 _8 ]
  13.     '设定相邻拟合点间计算分段数量,可根据情况自行更改
    : Q- L9 @, F3 {
  14.     Lng相邻拟合点间计算分段数量 = 50
    " i! _! C3 G8 @. Q* X
  15.     '数值越大,曲线精度相对越高,但运行时间越长, V. Z% f$ j* p) \3 ]: x; {2 M; i
  16.     2 O5 Z% P, Z6 y5 L9 e  H
  17.     6 o& P- g, F, D1 O( X
  18.    
    0 f$ H5 u/ G9 S* R
  19.     '按拟合点数量重定义数组/ A) u  d7 m- t# |& N6 b
  20.     ReDim DblArr样条曲线拟合点(Lng样条曲线拟合点数量 * 3 - 1)
      x' P* z& [( A& v! q1 P
  21.    
    % M3 T" l, B5 K; x
  22.     With ThisDrawing" ?; @% D8 P- B/ h6 R' N4 W. p
  23.     $ ^/ g3 M+ R' |' [+ c+ m
  24.         '以坐标原点为圆心,最小半径为半径画一个辅助圆,其半径做为变量在以后计算中还要逐步更改
    # H2 z* ~, }; i$ ~, N( V+ }
  25.         Set Obj圆 = .ModelSpace.AddCircle(DblArr圆心, Dbl最小半径)
    ) [% t8 w6 G1 Q! t" n  S. Z- k' O
  26.         
    % w# H4 r+ l8 G  V
  27.         '复制圆,做为结果显示3 D. C1 b" M3 u
  28.         Obj圆.Copy. w7 K) I; y  d0 K) r1 w7 k
  29.         
    : U4 t# E: ]5 K7 v* I
  30.         '圆心右侧最小半径长度处为曲线起点
    % S+ X  C3 r4 U+ S& |+ V
  31.         Var点 = .Utility.PolarPoint(DblArr圆心, 0, Dbl最小半径)! ^' ]3 Y) R# q
  32.         5 u8 E0 {0 |3 w
  33.         '记录曲线的第一个拟合点(起点)坐标* T) D  x+ g- \* V3 q4 V
  34.         DblArr样条曲线拟合点(0) = Var点(0): DblArr样条曲线拟合点(1) = Var点(1)9 {7 D/ W; i) p+ o  F! f& c6 u
  35.         1 t: n8 n0 V( Q* g# l( X$ e8 m1 x
  36.         For Lng拟合点循环变量 = 0 To Lng样条曲线拟合点数量 - 2
    - x  ?/ m! i" r4 Y7 a# y
  37.             For Lng计算分段循环变量 = 1 To Lng相邻拟合点间计算分段数量1 Y& Y' E  o2 J/ i" g/ J
  38.             
    8 q! w, j$ d4 y
  39.                 '按半径计算夹角% H3 S& H" E/ o- {' @9 ^
  40.                 Dbl夹角 = (Obj圆.Radius - Dbl最小半径) / (Dbl最大半径 - Dbl最小半径) * (Dbl最大夹角 - Dbl最小夹角) _0 f8 X* a* O/ p
  41.                   + Dbl最小夹角
    % v# S/ q4 c- i1 G9 e9 r
  42.                
    3 q$ F1 P3 ?% o
  43.                 '以曲线上一个计算点为基点,用极坐标方法在规定角度和适当长度(按500,保证与圆相交)取点
    " l$ @( A2 s/ q
  44.                 '以曲线上一个取样点为起点,上面取到的点为端点画辅助直线' j; O/ Z1 Q, F& C
  45.                 Set Obj直线 = .ModelSpace.AddLine(Var点, _  H; u3 R' b# f6 W, k' U; e
  46.                   .Utility.PolarPoint(Var点, _
    2 c0 v. A) l1 E
  47.                     .Utility.AngleToReal(90 - Dbl夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点), 500)), }3 a& x: a- ?* P  G  \
  48.                            
    # s& s0 ~5 [7 t
  49.                 '辅助圆半径增大一个增量单位! P; n; X+ W$ l' A6 b$ B( x$ ?% {
  50.                 Obj圆.Radius = (Lng相邻拟合点间计算分段数量 * Lng拟合点循环变量 + Lng计算分段循环变量) _8 @# p  Y" H& A; n$ v6 z
  51.                   / ((Lng样条曲线拟合点数量 - 1) * Lng相邻拟合点间计算分段数量) _7 L$ H0 W9 h4 j8 \8 N7 v
  52.                   * (Dbl最大半径 - Dbl最小半径) + Dbl最小半径
    " u  R2 B: J: X: ]" c2 f2 ~
  53.                 , ?3 c& c' J( y! f3 a" }0 v
  54.                 '获得辅助直线与辅助圆的交点
    7 U; p+ c2 i! f4 N9 W5 \3 p5 Y
  55.                 Var点 = Obj直线.IntersectWith(Obj圆, acExtendNone)
    1 X' q7 l- q: W( ?2 j- r* A
  56.                
    ; {- D2 b: S) v
  57.                 '删除辅助直线0 u, X7 t0 ^2 K+ }
  58.                 Obj直线.Delete                        6 |# Q! D. y. Z2 ^
  59.             Next8 j0 Q8 N  e& e7 _
  60.             
    ; g6 s) r( J% Y5 c; }( t$ [
  61.             '记录拟合点坐标
    9 T5 Q5 R- r  ?5 y( i
  62.             DblArr样条曲线拟合点(Lng拟合点循环变量 * 3 + 3) = Var点(0): DblArr样条曲线拟合点(Lng拟合点循环变量 * 3 + 4) = Var点(1)
    5 X: `7 f9 {$ V- A6 Z) @; |
  63.         Next
    0 ?2 A# t$ O/ J% K3 v" C
  64.                 0 {# m: u! }! M& n% x% u
  65.         '计算起点切向
    7 q) P8 o4 i1 u/ J- l
  66.         DblArr样条曲线起点切向(0) = Cos(.Utility.AngleToReal(90 - Dbl最小夹角, acDegrees)). S( i4 X4 U5 Y6 s- N6 u
  67.         DblArr样条曲线起点切向(1) = Sin(.Utility.AngleToReal(90 - Dbl最小夹角, acDegrees)); T; U; o9 l  T8 P8 S8 h" }
  68.         
    7 I( Q8 G% n9 o+ j0 ]
  69.         '计算端点切向
    1 d) S" M) b; a6 o; W$ s
  70.         DblArr样条曲线端点切向(0) = Cos(.Utility.AngleToReal(90 - Dbl最大夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点))+ w3 k! z2 K; z4 Q; ~# X6 s
  71.         DblArr样条曲线端点切向(1) = Sin(.Utility.AngleToReal(90 - Dbl最大夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点))
    6 a9 u: ?2 Z1 r: F5 D/ |
  72.         
    7 ]- T% U: b/ d2 |5 Y1 ], _
  73.         '画曲线6 J/ [* l; f. b. q7 F
  74.         .ModelSpace.AddSpline DblArr样条曲线拟合点, DblArr样条曲线起点切向, DblArr样条曲线端点切向
    , y$ R9 d; O9 Q. A/ c
  75.     End With: J9 i% X; U+ {6 x: m0 x0 g. o- }
复制代码
 楼主| 发表于 2009-5-24 10:13:07 | 显示全部楼层 来自: 中国江苏苏州
首先非常感谢版主的解答!
& a( e% l" Q; [5 n6 L9 ?$ m如果改成多段线,该代码又如何修改呢?
发表于 2009-5-24 14:45:56 | 显示全部楼层 来自: 中国辽宁营口

回复 3# benwang 的帖子

  1. 5 Z* k9 Y/ w  r" a" ]4 }
  2.     Dim Dbl最小半径 As Double, Dbl最大半径 As Double, Dbl最小夹角 As Double, Dbl最大夹角 As Double# I6 v: [( H+ [/ w" r3 g
  3.     Dim Lng优化多段线顶点数量 As Long, Lng相邻顶点间计算分段数量 As Long4 _9 y' P5 M: z9 j) b1 K
  4.     Dim Obj圆 As AcadCircle, Obj直线 As AcadLine, DblArr圆心(2) As Double, Var点 As Variant* C& I& U5 p+ J1 z' _
  5.     Dim Lng顶点循环变量 As Long, Lng计算分段循环变量 As Long, Dbl夹角 As Double
    1 }  |; N6 c6 u
  6.     Dim DblArr优化多段线顶点() As Double
    ) J! a2 F/ U8 k. |4 y+ v
  7.     0 C! `# M" b$ U$ w( n2 u+ b) G, Z* o; _
  8.     '设定优化多段线顶点数量,通常不大于500
    / y' E9 E, ^- i9 q2 B- O8 v, W( H
  9.     Lng优化多段线顶点数量 = 101
    - ?: S# x% x0 X
  10.     '设定相邻顶点间计算分段数量
    2 h7 T, @8 M% b( m( Q8 [
  11.     Lng相邻顶点间计算分段数量 = 5! s+ ^* n) q4 R: D! x/ \
  12.     '数值越大,优化多段线精度相对越高,但运行时间越长1 d. s! |: m0 ]  r
  13.    
    9 [: p* k: Q1 q
  14.     '按顶点数量重定义数组
    " E* M# U# q' `4 O
  15.     ReDim DblArr优化多段线顶点(Lng优化多段线顶点数量 * 2 - 1)
    $ F, E. a( @8 z
  16.    
    / T6 t1 P! D* d
  17.     '已知条件/ Z: _2 J2 h3 {) f) K7 M
  18.     Dbl最小半径 = 250: Dbl最大半径 = 700: Dbl最小夹角 = 27: Dbl最大夹角 = 45) b( H6 ^0 L8 `$ n  P% b
  19.       _6 `0 `2 H; M" ^
  20.     With ThisDrawing4 K8 R1 M# a! z% ]( O
  21.     3 |$ n6 L0 z9 t
  22.         '以坐标原点为圆心,最小半径为半径画一个辅助圆,其半径做为变量在以后计算中还要逐步更改
    5 [, t2 O& u& `* S
  23.         Set Obj圆 = .ModelSpace.AddCircle(DblArr圆心, Dbl最小半径)/ f2 j7 x1 U7 x
  24.         
    9 c* H8 @9 m  R3 X2 \# F
  25.         '复制圆,做为结果显示
    , v. T! {8 t7 @5 Z9 _8 B
  26.         Obj圆.Copy
    " D% d5 M% ^6 c$ x* Y7 S, z6 L3 D
  27.         
    4 ~. P. S9 \" L9 d) ?
  28.         '圆心右侧最小半径长度处为优化多段线起点
    + t7 a/ c/ O4 E- B* L3 j* y
  29.         Var点 = .Utility.PolarPoint(DblArr圆心, 0, Dbl最小半径)( s- x, j* n" V9 w* q# X
  30.         
    + Q3 P+ o4 A5 O  L  f  R  _5 h
  31.         '记录优化多段线的第一个顶点(起点)坐标9 \& B2 o( d+ d5 Q) l
  32.         DblArr优化多段线顶点(0) = Var点(0): DblArr优化多段线顶点(1) = Var点(1)' [2 x% M4 t" E8 C
  33.         $ F9 h3 G. m# D; I1 A
  34.         For Lng顶点循环变量 = 0 To Lng优化多段线顶点数量 - 2
    2 d% z) a- X9 ^) D
  35.             For Lng计算分段循环变量 = 1 To Lng相邻顶点间计算分段数量
    ; I! I/ y+ d& B
  36.             
    " t% S  U( d' x* d* ~
  37.                 '按半径计算夹角5 J% d" s8 E, i7 L
  38.                 Dbl夹角 = (Obj圆.Radius - Dbl最小半径) / (Dbl最大半径 - Dbl最小半径) * (Dbl最大夹角 - Dbl最小夹角) _9 h! q* Z6 V8 v0 R% n# n+ ]' V
  39.                   + Dbl最小夹角
    1 d/ |7 o4 g8 d; d
  40.                
    8 m3 Z* F! I; v! I
  41.                 '以曲线上一个计算点为基点,用极坐标方法在规定角度和适当长度(按500,保证与圆相交)取点- i8 V" W2 k. W, O
  42.                 '以曲线上一个取样点为起点,上面取到的点为端点画辅助直线
    * _6 ~6 L% A7 X, {( Y( @
  43.                 Set Obj直线 = .ModelSpace.AddLine(Var点, _
    3 v; a$ [3 V6 U) G$ A/ {
  44.                   .Utility.PolarPoint(Var点, _
    ) @4 X8 u$ E3 p! o) w8 O
  45.                     .Utility.AngleToReal(90 - Dbl夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点), 500))
    ( A/ o' Q3 X4 A
  46.                             ' g- @+ J; o5 G* ]: }8 D
  47.                 '辅助圆半径增大一个增量单位! L3 \2 t& L8 X5 R6 n' f
  48.                 Obj圆.Radius = (Lng相邻顶点间计算分段数量 * Lng顶点循环变量 + Lng计算分段循环变量) _
    ! c) t7 m: C/ W
  49.                   / ((Lng优化多段线顶点数量 - 1) * Lng相邻顶点间计算分段数量) _: F9 \0 y& q0 h
  50.                   * (Dbl最大半径 - Dbl最小半径) + Dbl最小半径
    - k8 Q) C0 T* z: [6 O3 E9 j  j
  51.                
    ) k5 B$ w  F/ c0 F
  52.                 '获得辅助直线与辅助圆的交点,即为本次循环要找的取样点
      `' T7 n: f( y4 _( i: Q: o8 n% u3 s  c
  53.                 Var点 = Obj直线.IntersectWith(Obj圆, acExtendNone). v1 r" \) l0 I! T, y* p% Q
  54.                
    1 l: m/ V2 u1 A
  55.                 '删除辅助直线4 ?; V: G1 ~4 f4 P% r
  56.                 Obj直线.Delete- K6 I5 s5 A1 g' }) P7 `5 F
  57.             Next8 u/ H8 W3 C7 S; u/ Q9 J
  58.             
    9 K# ?1 b& {' m  n( s
  59.             '记录顶点坐标4 Z% t. S  j2 a% M' L
  60.             DblArr优化多段线顶点(Lng顶点循环变量 * 2 + 2) = Var点(0): DblArr优化多段线顶点(Lng顶点循环变量 * 2 + 3) = Var点(1)
    ! |1 P" O. x& z* \# R% m" n
  61.         Next1 ^4 h* |" d9 ?& q  P
  62.         
    7 x2 V* {) j. B, i- o8 N
  63.         '画多段线% U  b8 X/ C% ]. q! O6 C
  64.         .ModelSpace.AddLightWeightPolyline DblArr优化多段线顶点
    ; e" J: E+ F; a8 C9 e
  65.     End With, X7 q- w; _- r0 O7 ~7 a- V% Z
复制代码
发表于 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 )

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