QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
查看: 4469|回复: 5
收起左侧

[讨论] 水泵叶线画法

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

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

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

x
如图,中间红色线与内圆切线夹角为27度,与外圆切线夹角为45度,随R增大,夹角均匀增大,求其曲线画法!
1111.JPG
发表于 2009-5-23 15:00:45 | 显示全部楼层 来自: 中国辽宁营口
  1. 8 }1 f0 N$ C; @: u
  2.     Dim Dbl最小半径 As Double, Dbl最大半径 As Double, Dbl最小夹角 As Double, Dbl最大夹角 As Double* F4 U2 t! {# R
  3.     Dim Lng样条曲线拟合点数量 As Long, Lng相邻拟合点间计算分段数量 As Long5 i$ H, f8 }- G3 P4 g1 v
  4.     Dim Obj圆 As AcadCircle, Obj直线 As AcadLine, DblArr圆心(2) As Double, Var点 As Variant
    5 p  S& m% y6 z! \+ v+ u
  5.     Dim Lng拟合点循环变量 As Long, Lng计算分段循环变量 As Long, Dbl夹角 As Double# M. k' |3 \8 J1 Q
  6.     Dim DblArr样条曲线拟合点() As Double, DblArr样条曲线起点切向(2) As Double, DblArr样条曲线端点切向(2) As Double
    # I2 f, `! T+ `; V% @$ W" @( i; M3 I
  7.     $ F- d+ r6 Q  j6 h  M
  8.     '已知条件
    % ^0 C9 ~/ D" t5 X5 R- m
  9.     Dbl最小半径 = 250: Dbl最大半径 = 700: Dbl最小夹角 = 27: Dbl最大夹角 = 45# X* j; E% f( {
  10.    
    7 n7 @  r; h9 \( q, D
  11.     '设定曲线拟合点数量,通常不大于500,可根据情况自行更改
    5 U$ I1 a( H6 h' b$ ?3 N
  12.     Lng样条曲线拟合点数量 = 101
    + G2 B& M# A+ E
  13.     '设定相邻拟合点间计算分段数量,可根据情况自行更改
    7 ~" u$ x; G/ M; L' y8 h' e; F
  14.     Lng相邻拟合点间计算分段数量 = 50
    # N9 U$ p( Z/ X0 W% N( c
  15.     '数值越大,曲线精度相对越高,但运行时间越长, w. E2 J5 m0 F5 l* Q, {" ^) b% i; Y
  16.     0 Z, a8 |- r6 T+ b8 }
  17.    
    " j1 [6 T( f4 f: L$ I& H
  18.     / M$ S# W1 z! y! \- U7 X
  19.     '按拟合点数量重定义数组
    3 L/ n: j2 r7 \" ~
  20.     ReDim DblArr样条曲线拟合点(Lng样条曲线拟合点数量 * 3 - 1): c0 v, H( y! q
  21.     ' d5 \. w* A+ E& T1 E7 G
  22.     With ThisDrawing0 L+ V# b$ _( g6 b6 X( d- r# i5 U
  23.    
    8 `. ?1 u' n2 b: }2 j9 k
  24.         '以坐标原点为圆心,最小半径为半径画一个辅助圆,其半径做为变量在以后计算中还要逐步更改
      X) p6 X) ?' Q3 @4 _; h2 i
  25.         Set Obj圆 = .ModelSpace.AddCircle(DblArr圆心, Dbl最小半径)
    ' k7 z( ?% e$ m+ U" p
  26.         # ]) D; [% x) e4 i) A, o: r6 y
  27.         '复制圆,做为结果显示* e5 Q1 X. i/ e: I
  28.         Obj圆.Copy5 @9 w3 h$ E1 Y+ M
  29.         ) |0 [+ e  q+ E7 X3 P) c8 A
  30.         '圆心右侧最小半径长度处为曲线起点
    ) s( s* |8 [) B7 l
  31.         Var点 = .Utility.PolarPoint(DblArr圆心, 0, Dbl最小半径)
    & S% S. `* G/ b7 O; z
  32.         
    3 X+ ?  j; o2 q2 L% o
  33.         '记录曲线的第一个拟合点(起点)坐标
    , z0 Z  `9 E4 n( @5 Q
  34.         DblArr样条曲线拟合点(0) = Var点(0): DblArr样条曲线拟合点(1) = Var点(1)7 A7 P: F5 V4 f; j
  35.         2 N3 M9 ^& n5 B' ]% k
  36.         For Lng拟合点循环变量 = 0 To Lng样条曲线拟合点数量 - 2
    $ V  y3 Q5 ]1 j: z
  37.             For Lng计算分段循环变量 = 1 To Lng相邻拟合点间计算分段数量. D2 B9 e+ ?6 ?5 M8 ]& H) m/ h
  38.             0 f- u$ {- R3 G7 k( u' K
  39.                 '按半径计算夹角
    & N6 p5 f' }. Y. {# H
  40.                 Dbl夹角 = (Obj圆.Radius - Dbl最小半径) / (Dbl最大半径 - Dbl最小半径) * (Dbl最大夹角 - Dbl最小夹角) _
    + |! A7 @+ ^8 A& n
  41.                   + Dbl最小夹角
    , J- D; \9 Q4 n, Y: S( e
  42.                 ! w' a: y4 Y/ h; x* R- r
  43.                 '以曲线上一个计算点为基点,用极坐标方法在规定角度和适当长度(按500,保证与圆相交)取点$ j% P6 ^9 r* b9 ~- x9 Y$ ~
  44.                 '以曲线上一个取样点为起点,上面取到的点为端点画辅助直线
    & \$ k( Z7 ~7 L8 j+ S5 c
  45.                 Set Obj直线 = .ModelSpace.AddLine(Var点, _0 w* X& B! I' i; u5 `4 l
  46.                   .Utility.PolarPoint(Var点, _
    , p6 c3 S! C7 `' F3 z: K3 u$ E2 f
  47.                     .Utility.AngleToReal(90 - Dbl夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点), 500))
    ! v. k! T' i/ ?7 I% x# w* {
  48.                             " z2 z6 `$ I* B8 N+ X
  49.                 '辅助圆半径增大一个增量单位
    . ~% \1 U& ?, \5 g
  50.                 Obj圆.Radius = (Lng相邻拟合点间计算分段数量 * Lng拟合点循环变量 + Lng计算分段循环变量) _
    / z; ]" u$ Q# z% O% u0 K1 m3 O
  51.                   / ((Lng样条曲线拟合点数量 - 1) * Lng相邻拟合点间计算分段数量) _! g1 x* V) E% t6 n
  52.                   * (Dbl最大半径 - Dbl最小半径) + Dbl最小半径
    ) d+ Y/ X+ X5 c& u
  53.                 8 T0 b, g, a' P4 m$ T2 W
  54.                 '获得辅助直线与辅助圆的交点
    ) W9 Z( ~  j0 w* q* v$ J- x" a
  55.                 Var点 = Obj直线.IntersectWith(Obj圆, acExtendNone)& k4 W0 q' W. e/ u  p
  56.                
    4 g. k6 @& H; \& _" A" K1 E
  57.                 '删除辅助直线
    3 {" Q/ a( s) ~* l
  58.                 Obj直线.Delete                        7 m3 ?( E* N4 V. P* Y. ~
  59.             Next
    * T, s- H9 B. t3 X* Y0 w
  60.             
    1 \& d; `! J, M1 A) Q! T$ w& t4 z1 \
  61.             '记录拟合点坐标1 E$ S% `7 ^7 r. m0 e' i
  62.             DblArr样条曲线拟合点(Lng拟合点循环变量 * 3 + 3) = Var点(0): DblArr样条曲线拟合点(Lng拟合点循环变量 * 3 + 4) = Var点(1)
    5 ^# c  K$ |2 R4 |& _" B( i
  63.         Next
    7 e; s- e, F& b& V( T
  64.                 : j. l: m+ ]3 F4 d7 ^
  65.         '计算起点切向
    - ~, S- T( e/ D1 q  B
  66.         DblArr样条曲线起点切向(0) = Cos(.Utility.AngleToReal(90 - Dbl最小夹角, acDegrees)), a& S) Q, R9 ~; t" @" K
  67.         DblArr样条曲线起点切向(1) = Sin(.Utility.AngleToReal(90 - Dbl最小夹角, acDegrees))3 E: z5 v. @4 L
  68.         - H0 ~6 I9 v3 _! P+ h% R. A
  69.         '计算端点切向, w; j: a* b' t) h, D0 b# `
  70.         DblArr样条曲线端点切向(0) = Cos(.Utility.AngleToReal(90 - Dbl最大夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点))
    $ L' B( b  m+ p- T2 `7 q7 a$ A
  71.         DblArr样条曲线端点切向(1) = Sin(.Utility.AngleToReal(90 - Dbl最大夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点))
    ! b  ]6 D; P* F
  72.         
      g, d$ S& o% l7 M
  73.         '画曲线  m# G" V6 i; [  v4 r9 \& G) r' J  g
  74.         .ModelSpace.AddSpline DblArr样条曲线拟合点, DblArr样条曲线起点切向, DblArr样条曲线端点切向
    , w' Y  @$ W1 E7 L
  75.     End With
    ( r9 X1 E) N4 Q7 c1 o
复制代码
 楼主| 发表于 2009-5-24 10:13:07 | 显示全部楼层 来自: 中国江苏苏州
首先非常感谢版主的解答!
9 {, ?( q  p9 c如果改成多段线,该代码又如何修改呢?
发表于 2009-5-24 14:45:56 | 显示全部楼层 来自: 中国辽宁营口

回复 3# benwang 的帖子


  1. $ T  V: Q" S6 l# |# f4 h
  2.     Dim Dbl最小半径 As Double, Dbl最大半径 As Double, Dbl最小夹角 As Double, Dbl最大夹角 As Double
      Q/ {! J, g. H  m
  3.     Dim Lng优化多段线顶点数量 As Long, Lng相邻顶点间计算分段数量 As Long9 M6 w) g: }7 w( r1 I) J
  4.     Dim Obj圆 As AcadCircle, Obj直线 As AcadLine, DblArr圆心(2) As Double, Var点 As Variant
      X1 d) v7 g* \4 x
  5.     Dim Lng顶点循环变量 As Long, Lng计算分段循环变量 As Long, Dbl夹角 As Double
    3 H1 V# ~' P2 M9 [3 G* a
  6.     Dim DblArr优化多段线顶点() As Double# h$ T: g, ]6 Z9 ~
  7.    
    " X1 E+ F, T+ e" M; F: z
  8.     '设定优化多段线顶点数量,通常不大于500
    % C* v/ A. Z/ ^
  9.     Lng优化多段线顶点数量 = 1015 Z, ?0 a) s4 G. T( E7 d
  10.     '设定相邻顶点间计算分段数量
    4 h+ E  I0 w+ R8 |" R
  11.     Lng相邻顶点间计算分段数量 = 5  E1 R+ ^# V+ J5 |7 l+ _, j
  12.     '数值越大,优化多段线精度相对越高,但运行时间越长) |! W$ r4 \# N, o
  13.     3 ~3 c: h: O: [1 K' X, ]* j" w  R
  14.     '按顶点数量重定义数组
    7 ?; |" {( E/ t; q! S
  15.     ReDim DblArr优化多段线顶点(Lng优化多段线顶点数量 * 2 - 1); O2 F& t) C* ]& b- e  V# Z. |# a% U5 j* T
  16.    
    " L- S5 \  R8 [
  17.     '已知条件4 D& Z1 p: l: {
  18.     Dbl最小半径 = 250: Dbl最大半径 = 700: Dbl最小夹角 = 27: Dbl最大夹角 = 456 p. j& e# {) n! N* I! C
  19.     . O. M' j$ _  x1 F6 C/ U& U
  20.     With ThisDrawing$ C& `+ U1 Y* b  |, ~
  21.       @: [: q3 i4 Q" q
  22.         '以坐标原点为圆心,最小半径为半径画一个辅助圆,其半径做为变量在以后计算中还要逐步更改
    ; R; z/ i$ Z+ {1 R( q/ `
  23.         Set Obj圆 = .ModelSpace.AddCircle(DblArr圆心, Dbl最小半径)6 s  v' C% [; P- T, r2 H# w
  24.         . d9 c0 Q8 W5 T6 F2 X
  25.         '复制圆,做为结果显示1 ^+ L# R0 n- {% K0 o* H+ z
  26.         Obj圆.Copy
    7 g, z: e% |3 U! L( a
  27.         ( t/ `# M! G+ T1 k; l
  28.         '圆心右侧最小半径长度处为优化多段线起点( ^# j5 {9 m& _( j/ j: b
  29.         Var点 = .Utility.PolarPoint(DblArr圆心, 0, Dbl最小半径)
    2 z, C; u. l8 o2 P8 l+ E
  30.         6 {7 U# u9 D2 \' _+ j
  31.         '记录优化多段线的第一个顶点(起点)坐标
    & ?7 u- n) b6 O# a' ?
  32.         DblArr优化多段线顶点(0) = Var点(0): DblArr优化多段线顶点(1) = Var点(1)1 J3 O2 `, F6 @1 Q$ U3 m" E
  33.         4 x6 i5 M0 `, ]! U! H$ j: v& N
  34.         For Lng顶点循环变量 = 0 To Lng优化多段线顶点数量 - 2: m! B( z' Q0 k  X
  35.             For Lng计算分段循环变量 = 1 To Lng相邻顶点间计算分段数量" }5 b6 J  s) W2 N& {$ P: {
  36.             
    " M% v1 z+ f7 C+ d% v
  37.                 '按半径计算夹角
    ! C- G* {$ R, U- ?4 F0 s
  38.                 Dbl夹角 = (Obj圆.Radius - Dbl最小半径) / (Dbl最大半径 - Dbl最小半径) * (Dbl最大夹角 - Dbl最小夹角) _9 C8 r8 W/ n4 s, l3 ^9 E3 y2 E) v0 m
  39.                   + Dbl最小夹角1 z  Y8 P* W- E, ~" N6 b# q/ Q+ }
  40.                
    ) }: C) x; P% M# `; s
  41.                 '以曲线上一个计算点为基点,用极坐标方法在规定角度和适当长度(按500,保证与圆相交)取点
    3 z; B: e: i) U" C6 r, m! \3 h
  42.                 '以曲线上一个取样点为起点,上面取到的点为端点画辅助直线! i3 u; w! V; C0 ~
  43.                 Set Obj直线 = .ModelSpace.AddLine(Var点, _; s" }, y9 n. H
  44.                   .Utility.PolarPoint(Var点, _8 s6 L% j  }, X4 _: y
  45.                     .Utility.AngleToReal(90 - Dbl夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点), 500))* ]% W; S& {8 l1 [) Q: h
  46.                            
    5 K: r! {$ ~% e7 X" d1 p$ z
  47.                 '辅助圆半径增大一个增量单位
    : A1 k5 o2 o  G8 f- g- o+ G
  48.                 Obj圆.Radius = (Lng相邻顶点间计算分段数量 * Lng顶点循环变量 + Lng计算分段循环变量) _1 L1 q3 p% ~* ^$ L
  49.                   / ((Lng优化多段线顶点数量 - 1) * Lng相邻顶点间计算分段数量) _
    , F0 u9 i: t1 s% W# a
  50.                   * (Dbl最大半径 - Dbl最小半径) + Dbl最小半径1 x7 l1 Z1 S3 r8 M
  51.                 7 Q3 w: G: L( ~3 x( V" p$ y
  52.                 '获得辅助直线与辅助圆的交点,即为本次循环要找的取样点, W) `3 r  {3 Y0 S! k% c2 j
  53.                 Var点 = Obj直线.IntersectWith(Obj圆, acExtendNone). r2 Y5 t# t8 S
  54.                 ( t# `. J! Q) s" b. d6 W
  55.                 '删除辅助直线" o: J! c7 l& O. j, h& Q/ t
  56.                 Obj直线.Delete
    9 h7 d: k: A  D6 Z* m  j
  57.             Next
    * H, Q9 K4 ]5 q4 I/ e1 ~1 J
  58.             ' Z5 {7 s4 k6 a" v, B$ [% e
  59.             '记录顶点坐标* q% B9 N) N5 Z& r
  60.             DblArr优化多段线顶点(Lng顶点循环变量 * 2 + 2) = Var点(0): DblArr优化多段线顶点(Lng顶点循环变量 * 2 + 3) = Var点(1)4 l1 T$ M/ Z  D) J, u
  61.         Next2 A( v  U9 Q8 w
  62.         
    7 C* y; f& m/ a& f* ]! \
  63.         '画多段线! c) d4 m# F" n5 u  J. P
  64.         .ModelSpace.AddLightWeightPolyline DblArr优化多段线顶点
    3 O% S: v* K$ [4 L
  65.     End With% q9 C+ w8 f) l& D
复制代码
发表于 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 )

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