QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

[讨论] 水泵叶线画法

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

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

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

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

  1.   q: R: o8 T# N: L
  2.     Dim Dbl最小半径 As Double, Dbl最大半径 As Double, Dbl最小夹角 As Double, Dbl最大夹角 As Double
    8 @! R1 L1 C* Y1 U) Q: [
  3.     Dim Lng样条曲线拟合点数量 As Long, Lng相邻拟合点间计算分段数量 As Long& Q. k0 ]0 X7 t- w% s. W7 W
  4.     Dim Obj圆 As AcadCircle, Obj直线 As AcadLine, DblArr圆心(2) As Double, Var点 As Variant- d4 t7 q) y  G4 }! O: Q
  5.     Dim Lng拟合点循环变量 As Long, Lng计算分段循环变量 As Long, Dbl夹角 As Double- D/ i" w* ^; G* m
  6.     Dim DblArr样条曲线拟合点() As Double, DblArr样条曲线起点切向(2) As Double, DblArr样条曲线端点切向(2) As Double+ m6 w1 X1 Y3 S6 S- a3 o; y1 J
  7.    
    ( n: P  [* B& y9 U- j. M' \
  8.     '已知条件
    " d( I. j4 @( q" z7 U
  9.     Dbl最小半径 = 250: Dbl最大半径 = 700: Dbl最小夹角 = 27: Dbl最大夹角 = 45
    & V8 N  O' {4 H1 u% U1 _
  10.    
    : D3 d3 H( W9 ^8 l0 n" X
  11.     '设定曲线拟合点数量,通常不大于500,可根据情况自行更改
    ) k' i. k9 u5 |
  12.     Lng样条曲线拟合点数量 = 101
    ! I8 ]* a+ I, Y4 c+ k
  13.     '设定相邻拟合点间计算分段数量,可根据情况自行更改1 p0 C7 w+ Z, c
  14.     Lng相邻拟合点间计算分段数量 = 50
    % g+ R3 t. j) P) R
  15.     '数值越大,曲线精度相对越高,但运行时间越长
    2 l( @" R+ Z; u% {' ^7 |
  16.     + V8 B4 m9 J0 k2 s. Z: ?
  17.     0 F) C$ [! x' m1 O
  18.     2 R) m5 J1 |8 {' }  H7 R
  19.     '按拟合点数量重定义数组
    4 j% G6 |2 I! o  ^; U
  20.     ReDim DblArr样条曲线拟合点(Lng样条曲线拟合点数量 * 3 - 1)
    ' |+ T" Z4 g9 O! _/ u/ \0 S
  21.    
    3 V% R5 o+ n5 C
  22.     With ThisDrawing
    " Y! q0 R2 C+ D/ E
  23.     2 Y$ b# `$ R- W
  24.         '以坐标原点为圆心,最小半径为半径画一个辅助圆,其半径做为变量在以后计算中还要逐步更改) K# i" e2 u6 C. M- F8 R
  25.         Set Obj圆 = .ModelSpace.AddCircle(DblArr圆心, Dbl最小半径)
    - C% O  z! w# G2 h" c4 d% c
  26.         
    - |) s7 c6 D  W
  27.         '复制圆,做为结果显示
    4 ?: X8 c" `( P! X( @
  28.         Obj圆.Copy
    ; t( x2 ~1 H# I3 G: |6 x* e
  29.         
    6 _5 H# \9 j4 W6 v; u; R: x9 s
  30.         '圆心右侧最小半径长度处为曲线起点
    # x1 E; e5 x8 D, V- J6 t3 z
  31.         Var点 = .Utility.PolarPoint(DblArr圆心, 0, Dbl最小半径)+ Y) {2 N5 \  A% }; C. D. i+ [( }
  32.         
    0 Q) m& F5 N- U* P7 `
  33.         '记录曲线的第一个拟合点(起点)坐标
    7 O4 ^0 F& J$ I3 f4 W
  34.         DblArr样条曲线拟合点(0) = Var点(0): DblArr样条曲线拟合点(1) = Var点(1)
    * I, c* L3 s0 e
  35.         + W2 s7 F' v" J1 V& W- j
  36.         For Lng拟合点循环变量 = 0 To Lng样条曲线拟合点数量 - 2; t5 K8 \* i/ f' c+ w" c- R
  37.             For Lng计算分段循环变量 = 1 To Lng相邻拟合点间计算分段数量' H4 j' x9 X- O' m
  38.             " ^. j# W" S7 `/ w# G* g3 ?
  39.                 '按半径计算夹角) S* ~6 s2 \3 k( H" p
  40.                 Dbl夹角 = (Obj圆.Radius - Dbl最小半径) / (Dbl最大半径 - Dbl最小半径) * (Dbl最大夹角 - Dbl最小夹角) _3 t! l/ n4 Z" ?3 w1 z
  41.                   + Dbl最小夹角) W: J5 ~1 c9 }4 g" X
  42.                
    / c. M; Y' r: G
  43.                 '以曲线上一个计算点为基点,用极坐标方法在规定角度和适当长度(按500,保证与圆相交)取点: z4 o$ E3 R* q0 S
  44.                 '以曲线上一个取样点为起点,上面取到的点为端点画辅助直线
    - i* G' Z9 A2 F- Q# j3 u
  45.                 Set Obj直线 = .ModelSpace.AddLine(Var点, _
    / V5 [' i3 L/ A' i( S
  46.                   .Utility.PolarPoint(Var点, _
    $ C+ X( G- H( u( j6 c
  47.                     .Utility.AngleToReal(90 - Dbl夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点), 500))0 o2 l0 S. z4 a& ~: V+ ]$ s) P: c4 n
  48.                            
    5 T6 P5 `. L7 s0 B) k: v
  49.                 '辅助圆半径增大一个增量单位
    1 o0 f2 i, _3 e# f$ I1 I- S+ s
  50.                 Obj圆.Radius = (Lng相邻拟合点间计算分段数量 * Lng拟合点循环变量 + Lng计算分段循环变量) _6 n9 }8 M2 N. e+ x- M  g& \
  51.                   / ((Lng样条曲线拟合点数量 - 1) * Lng相邻拟合点间计算分段数量) _1 n" e" I6 w7 S2 R1 _, W
  52.                   * (Dbl最大半径 - Dbl最小半径) + Dbl最小半径5 f8 g0 L8 V9 B% W% Z
  53.                
    7 \  Y( r, e- H$ s' c
  54.                 '获得辅助直线与辅助圆的交点
    - y+ g8 w5 x3 O; O8 e- G
  55.                 Var点 = Obj直线.IntersectWith(Obj圆, acExtendNone)( F( r. c) H: g7 V
  56.                
    : a: N+ k" u# f/ H% b+ T
  57.                 '删除辅助直线! Y/ Z3 W# ~6 A2 s8 N0 _
  58.                 Obj直线.Delete                        
    , g  _: g2 s0 Q/ ~
  59.             Next4 e& Y; v  x* t$ H9 J' |, z
  60.             ! i+ V& Y$ V, D7 t6 D
  61.             '记录拟合点坐标! Z, b7 B7 W1 S% U4 b
  62.             DblArr样条曲线拟合点(Lng拟合点循环变量 * 3 + 3) = Var点(0): DblArr样条曲线拟合点(Lng拟合点循环变量 * 3 + 4) = Var点(1)
    2 ]1 }3 ]  l& u+ ?# {
  63.         Next( S) Y8 h: h' [
  64.                
    , u8 [% r7 p* C  @6 U/ v
  65.         '计算起点切向) S* V+ Z2 F. a" d
  66.         DblArr样条曲线起点切向(0) = Cos(.Utility.AngleToReal(90 - Dbl最小夹角, acDegrees))
    ! u/ Q" \' S- u9 r6 K4 Z
  67.         DblArr样条曲线起点切向(1) = Sin(.Utility.AngleToReal(90 - Dbl最小夹角, acDegrees))
    ) W; o6 `% v$ c* Q+ B5 S, x8 k
  68.         
    . K4 @! l4 t( @' z
  69.         '计算端点切向# {4 P! V3 J( X8 V. d
  70.         DblArr样条曲线端点切向(0) = Cos(.Utility.AngleToReal(90 - Dbl最大夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点))
    . \) F$ y& y( S5 {
  71.         DblArr样条曲线端点切向(1) = Sin(.Utility.AngleToReal(90 - Dbl最大夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点))! O! k) C, o% V+ v, H7 m
  72.         1 D9 e( E1 b4 j
  73.         '画曲线
    9 e9 K1 U7 m, n. n' d
  74.         .ModelSpace.AddSpline DblArr样条曲线拟合点, DblArr样条曲线起点切向, DblArr样条曲线端点切向
    % `! E, ]5 ]. r( e$ `) R1 Z
  75.     End With
    1 X  n& w; p  t4 {# E8 a4 D
复制代码
 楼主| 发表于 2009-5-24 10:13:07 | 显示全部楼层 来自: 中国江苏苏州
首先非常感谢版主的解答!+ b1 s  m! t; B2 p
如果改成多段线,该代码又如何修改呢?
发表于 2009-5-24 14:45:56 | 显示全部楼层 来自: 中国辽宁营口

回复 3# benwang 的帖子

  1. , }) j* _# b, i( j$ b. ~
  2.     Dim Dbl最小半径 As Double, Dbl最大半径 As Double, Dbl最小夹角 As Double, Dbl最大夹角 As Double
    ( Z3 }1 ]9 v& b. z6 ^
  3.     Dim Lng优化多段线顶点数量 As Long, Lng相邻顶点间计算分段数量 As Long
    / r! Q1 ^' l- i/ k' U; G
  4.     Dim Obj圆 As AcadCircle, Obj直线 As AcadLine, DblArr圆心(2) As Double, Var点 As Variant
    1 o* N& u8 J! w
  5.     Dim Lng顶点循环变量 As Long, Lng计算分段循环变量 As Long, Dbl夹角 As Double
    ! K/ j( \9 w7 x8 N  ?9 Y7 y+ e& _
  6.     Dim DblArr优化多段线顶点() As Double
    / `" \! ~0 K; d, g# \8 Y6 U: j
  7.    
    0 b; S& F8 w; x2 L) O% L
  8.     '设定优化多段线顶点数量,通常不大于500
    ' V8 ^2 G9 x; f( B
  9.     Lng优化多段线顶点数量 = 101
    0 G3 V( V! N1 U
  10.     '设定相邻顶点间计算分段数量
    * U+ t: W$ w( Z1 ?: C0 Z1 c# z
  11.     Lng相邻顶点间计算分段数量 = 52 z/ I+ U. }- M! A
  12.     '数值越大,优化多段线精度相对越高,但运行时间越长
    ; S* ?* D4 V2 z. z& Y+ N4 G, [. e
  13.     6 n  h# b: R9 `! n1 G) W
  14.     '按顶点数量重定义数组) A* w. G% ~; P  H
  15.     ReDim DblArr优化多段线顶点(Lng优化多段线顶点数量 * 2 - 1)
    ( Z& c4 e7 I( c5 \- e$ D
  16.     " G( q" r6 _. Q) ]+ V" T
  17.     '已知条件' W4 Z( q/ t$ V9 d/ h% d3 t
  18.     Dbl最小半径 = 250: Dbl最大半径 = 700: Dbl最小夹角 = 27: Dbl最大夹角 = 45* {5 _; l0 z5 J9 ^6 w( F& x
  19.    
    + Y2 D0 E8 e3 v. _
  20.     With ThisDrawing& I& q; r" G" c/ |6 C
  21.     , V6 k% V5 s2 {6 T- _6 `
  22.         '以坐标原点为圆心,最小半径为半径画一个辅助圆,其半径做为变量在以后计算中还要逐步更改
    - O9 S3 l$ {* Y; f/ X8 Q$ B$ {4 I
  23.         Set Obj圆 = .ModelSpace.AddCircle(DblArr圆心, Dbl最小半径)1 i( _9 r( I" o& z! v5 g* T4 Q6 o
  24.         
    + R* ]0 m3 z% N6 n& u/ w, J
  25.         '复制圆,做为结果显示, j3 o. \# G/ h  Y7 [3 G
  26.         Obj圆.Copy
    ' ~  g- ?$ O3 n1 a
  27.           _1 p& l/ Z6 ?% `3 I" o& ~& B
  28.         '圆心右侧最小半径长度处为优化多段线起点
    + ~* `" |; b% Z- Z' a  H
  29.         Var点 = .Utility.PolarPoint(DblArr圆心, 0, Dbl最小半径)
    3 b1 ~" H( w8 O: s* `" ?1 p( j
  30.         
    4 y; w2 ]0 l5 _/ ?/ G2 @
  31.         '记录优化多段线的第一个顶点(起点)坐标
    ) a$ {5 G4 o# I2 y8 S
  32.         DblArr优化多段线顶点(0) = Var点(0): DblArr优化多段线顶点(1) = Var点(1)
    % M5 O2 B+ \/ E0 m
  33.         ; c2 O' O& Y  t0 c
  34.         For Lng顶点循环变量 = 0 To Lng优化多段线顶点数量 - 2) E" r3 z) h6 f& z+ f* W+ s
  35.             For Lng计算分段循环变量 = 1 To Lng相邻顶点间计算分段数量* S9 f" |: ]( ]2 ^( ]
  36.             
    : r2 k" ]' s4 m' H0 w
  37.                 '按半径计算夹角
      Z$ z) |. s+ Q; Q; C5 U0 S
  38.                 Dbl夹角 = (Obj圆.Radius - Dbl最小半径) / (Dbl最大半径 - Dbl最小半径) * (Dbl最大夹角 - Dbl最小夹角) _. a) o: ?% I. ~/ f9 v: L6 {8 n* l
  39.                   + Dbl最小夹角9 L6 X. c- e, H: O5 T
  40.                 . G" S( ?8 z( s- P/ P
  41.                 '以曲线上一个计算点为基点,用极坐标方法在规定角度和适当长度(按500,保证与圆相交)取点8 l# a: G. X# Q* C! S* F1 X  C
  42.                 '以曲线上一个取样点为起点,上面取到的点为端点画辅助直线
    0 @- h! O9 c  H) F/ ]; V
  43.                 Set Obj直线 = .ModelSpace.AddLine(Var点, _
    5 S! p" P% u: U, Q9 P+ r
  44.                   .Utility.PolarPoint(Var点, _
    / D# X4 h. x7 r: L  @; [8 n" t3 v" f
  45.                     .Utility.AngleToReal(90 - Dbl夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点), 500))
      h: o6 s! Q1 l4 ?# q
  46.                             + ^: g* k. p  {4 \; H
  47.                 '辅助圆半径增大一个增量单位
    & I/ Y2 s. \9 Q* m" T
  48.                 Obj圆.Radius = (Lng相邻顶点间计算分段数量 * Lng顶点循环变量 + Lng计算分段循环变量) _
    / s' w$ D+ d  O" f4 r3 ^
  49.                   / ((Lng优化多段线顶点数量 - 1) * Lng相邻顶点间计算分段数量) _
    4 B0 o1 }( d5 y% q
  50.                   * (Dbl最大半径 - Dbl最小半径) + Dbl最小半径3 ?3 \+ z% q, l9 X6 L2 U% g
  51.                
    : h2 X+ e+ b2 o$ N
  52.                 '获得辅助直线与辅助圆的交点,即为本次循环要找的取样点
    . f( ^) g% r4 N% ^
  53.                 Var点 = Obj直线.IntersectWith(Obj圆, acExtendNone), f- \* G: @* I: P3 w
  54.                 * A" N! E1 A# B2 V- ]
  55.                 '删除辅助直线( v( u6 ^( C% j/ ?
  56.                 Obj直线.Delete8 Y0 i# y$ G& @, n
  57.             Next
    * S  t% k: b  I, `
  58.             
    / x/ a) }0 [2 N0 [; q
  59.             '记录顶点坐标5 i, Z6 _4 l) }' `
  60.             DblArr优化多段线顶点(Lng顶点循环变量 * 2 + 2) = Var点(0): DblArr优化多段线顶点(Lng顶点循环变量 * 2 + 3) = Var点(1)
    + g: L9 X+ ?( P8 t! t; N
  61.         Next
    0 q" V8 A4 ~- M+ b8 Q
  62.         
    / y% ~, ~7 M) W- _2 J  i
  63.         '画多段线
      B4 f6 M5 }& J3 G: a# [* i9 @
  64.         .ModelSpace.AddLightWeightPolyline DblArr优化多段线顶点
    ( W$ z* N! w# v1 ~- B" p# v. e* ^
  65.     End With
    + F% _' o/ G1 H% r- H
复制代码
发表于 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 )

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