QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

[讨论] 水泵叶线画法

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

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

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

x
如图,中间红色线与内圆切线夹角为27度,与外圆切线夹角为45度,随R增大,夹角均匀增大,求其曲线画法!
1111.JPG
发表于 2009-5-23 15:00:45 | 显示全部楼层 来自: 中国辽宁营口
  1. - v! a: ?/ O* |7 g/ K
  2.     Dim Dbl最小半径 As Double, Dbl最大半径 As Double, Dbl最小夹角 As Double, Dbl最大夹角 As Double" \8 v* B5 Q$ C, @6 B) d5 i
  3.     Dim Lng样条曲线拟合点数量 As Long, Lng相邻拟合点间计算分段数量 As Long/ |$ W& @4 l: I2 ]/ x! l
  4.     Dim Obj圆 As AcadCircle, Obj直线 As AcadLine, DblArr圆心(2) As Double, Var点 As Variant: g% b* L8 H& s# j) P2 e. F. @8 }
  5.     Dim Lng拟合点循环变量 As Long, Lng计算分段循环变量 As Long, Dbl夹角 As Double6 J$ L) P4 g" n! W+ `5 E% f, k
  6.     Dim DblArr样条曲线拟合点() As Double, DblArr样条曲线起点切向(2) As Double, DblArr样条曲线端点切向(2) As Double* z/ A9 c& X% B
  7.     $ P. V; {6 }8 {. P6 D
  8.     '已知条件. W5 o2 M6 X# m
  9.     Dbl最小半径 = 250: Dbl最大半径 = 700: Dbl最小夹角 = 27: Dbl最大夹角 = 45
    # i! n9 C* s& K% w
  10.    
    % L# ]$ j9 `0 V
  11.     '设定曲线拟合点数量,通常不大于500,可根据情况自行更改
    ' x1 t0 R& I: c6 Q1 C8 q0 q) ]8 r
  12.     Lng样条曲线拟合点数量 = 101
      i' Q9 x  f1 |' _% v
  13.     '设定相邻拟合点间计算分段数量,可根据情况自行更改
    ! U( {. P! r0 }0 E
  14.     Lng相邻拟合点间计算分段数量 = 503 W" L. |* ]' X, z; }8 d6 x
  15.     '数值越大,曲线精度相对越高,但运行时间越长: w5 Q8 \: F  k3 E; w
  16.    
      D7 ^  q3 m) c
  17.    
    ( p6 u, ^; z4 y# O, w
  18.    
    - b7 O3 l& y6 i) C' a# X
  19.     '按拟合点数量重定义数组
    6 G6 @8 e8 s$ V8 W- q# I
  20.     ReDim DblArr样条曲线拟合点(Lng样条曲线拟合点数量 * 3 - 1)
    . k, t, Y, y0 |# I  W* o
  21.    
    7 G  F+ p. c$ C+ x3 y' x) c
  22.     With ThisDrawing, E7 I2 @# Y6 t( l/ t2 `* K9 b
  23.    
    & Z4 W( `4 Y9 c+ \
  24.         '以坐标原点为圆心,最小半径为半径画一个辅助圆,其半径做为变量在以后计算中还要逐步更改
    5 U' Y' i7 k/ K* M7 ^
  25.         Set Obj圆 = .ModelSpace.AddCircle(DblArr圆心, Dbl最小半径)3 Z: P3 Q& P) h& H+ V) G# g
  26.         
    6 V9 j) c: x2 U1 z9 E8 I) z
  27.         '复制圆,做为结果显示! F/ B' u4 G) o; u
  28.         Obj圆.Copy
    # o% h  j( _) d% r3 `6 r: b
  29.         9 e7 l' a: k: N$ N& A* {
  30.         '圆心右侧最小半径长度处为曲线起点
      ]0 G/ q% f& V. G) [) P/ w
  31.         Var点 = .Utility.PolarPoint(DblArr圆心, 0, Dbl最小半径)$ J8 A& @  h2 X- z# I/ L0 d
  32.         9 b/ D' g. o3 K
  33.         '记录曲线的第一个拟合点(起点)坐标
    " W2 o' r! A. m8 |9 y
  34.         DblArr样条曲线拟合点(0) = Var点(0): DblArr样条曲线拟合点(1) = Var点(1)1 @/ h  b) u# \3 o. C
  35.         2 p7 |3 {% }- c; ?7 d
  36.         For Lng拟合点循环变量 = 0 To Lng样条曲线拟合点数量 - 20 I( P% [2 |" J( J* d
  37.             For Lng计算分段循环变量 = 1 To Lng相邻拟合点间计算分段数量* t- A# @' |3 O1 ~/ y$ p: ]6 v5 ^- j
  38.             1 v  x. c5 F# j
  39.                 '按半径计算夹角
    , }$ f1 H; i% L9 |1 S8 |
  40.                 Dbl夹角 = (Obj圆.Radius - Dbl最小半径) / (Dbl最大半径 - Dbl最小半径) * (Dbl最大夹角 - Dbl最小夹角) _
    " K: v) y( `4 D# B: I/ o& v, u
  41.                   + Dbl最小夹角
    % N3 n' k/ ]+ X" Q* ^6 V  G; W' r0 _- \
  42.                 - i0 f5 _1 x) R6 H$ G
  43.                 '以曲线上一个计算点为基点,用极坐标方法在规定角度和适当长度(按500,保证与圆相交)取点
    ( r7 D" G. o$ o1 {1 _( R
  44.                 '以曲线上一个取样点为起点,上面取到的点为端点画辅助直线
    * L& G; q& f3 H0 r( w/ _, `* `1 ^& e
  45.                 Set Obj直线 = .ModelSpace.AddLine(Var点, _! x2 R1 d9 p* {$ d* r6 U( c4 p
  46.                   .Utility.PolarPoint(Var点, _' W8 s, U9 `1 I0 a+ Q# F
  47.                     .Utility.AngleToReal(90 - Dbl夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点), 500))
    / j- \+ y3 @; |# W
  48.                            
    5 T- p- U6 H& A# A0 o( Z
  49.                 '辅助圆半径增大一个增量单位
    % N$ R: Y) R# }* Q! J
  50.                 Obj圆.Radius = (Lng相邻拟合点间计算分段数量 * Lng拟合点循环变量 + Lng计算分段循环变量) _
    ; v9 x3 \% r9 P8 |; W- `
  51.                   / ((Lng样条曲线拟合点数量 - 1) * Lng相邻拟合点间计算分段数量) _
    ( ?8 k' i( \4 P# B
  52.                   * (Dbl最大半径 - Dbl最小半径) + Dbl最小半径+ d5 A; U4 X) z$ L. S' Q$ q
  53.                
    7 G) _1 S6 h9 [5 T6 C
  54.                 '获得辅助直线与辅助圆的交点
    * T0 O# @9 I! I+ Y- _
  55.                 Var点 = Obj直线.IntersectWith(Obj圆, acExtendNone)" y: l- i7 A& A# ~1 y4 }
  56.                 , @+ C9 `5 @" m
  57.                 '删除辅助直线
    2 V2 r0 a) v8 z9 M
  58.                 Obj直线.Delete                        ' `3 O7 G- x2 L/ b* S
  59.             Next
    ( W/ K4 C6 ~& H
  60.             0 F0 ~: l* D* G9 z8 Z& H
  61.             '记录拟合点坐标
    $ w1 |9 [' c0 s8 {. t4 e" K* G
  62.             DblArr样条曲线拟合点(Lng拟合点循环变量 * 3 + 3) = Var点(0): DblArr样条曲线拟合点(Lng拟合点循环变量 * 3 + 4) = Var点(1)
    & H! ~# L! t; I# a1 e7 Z6 M
  63.         Next7 j- ?5 O1 q8 o3 k) E
  64.                 ! i* D, m* M/ @3 q# J' e; R
  65.         '计算起点切向
    , M4 |! {8 @' @- Q& J
  66.         DblArr样条曲线起点切向(0) = Cos(.Utility.AngleToReal(90 - Dbl最小夹角, acDegrees))
    , S# `6 p$ y& j( w4 M0 D
  67.         DblArr样条曲线起点切向(1) = Sin(.Utility.AngleToReal(90 - Dbl最小夹角, acDegrees))# l9 A2 s, R& G0 a2 ^+ t
  68.         
    5 F8 E" Z& O  N% d
  69.         '计算端点切向9 q- ~6 h$ k1 W  x& F* g
  70.         DblArr样条曲线端点切向(0) = Cos(.Utility.AngleToReal(90 - Dbl最大夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点))( }$ l- _; d$ I1 @* d5 ]2 O
  71.         DblArr样条曲线端点切向(1) = Sin(.Utility.AngleToReal(90 - Dbl最大夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点))
    7 b2 O& K; `) Z2 ~
  72.         & L9 Q/ h  x2 e/ [$ g
  73.         '画曲线2 R! _( f' z9 m0 T8 Q$ I
  74.         .ModelSpace.AddSpline DblArr样条曲线拟合点, DblArr样条曲线起点切向, DblArr样条曲线端点切向
    % [' S8 U. ]3 V! N
  75.     End With
    2 H: ?/ m3 o4 p8 F- F  t5 K8 @  B9 i& Y
复制代码
 楼主| 发表于 2009-5-24 10:13:07 | 显示全部楼层 来自: 中国江苏苏州
首先非常感谢版主的解答!1 U6 ?: T: k6 s: w9 F) S9 P+ K
如果改成多段线,该代码又如何修改呢?
发表于 2009-5-24 14:45:56 | 显示全部楼层 来自: 中国辽宁营口

回复 3# benwang 的帖子

  1. * q0 a. ?; d9 E6 M) E
  2.     Dim Dbl最小半径 As Double, Dbl最大半径 As Double, Dbl最小夹角 As Double, Dbl最大夹角 As Double
    / W# u8 L& F$ X7 u7 T
  3.     Dim Lng优化多段线顶点数量 As Long, Lng相邻顶点间计算分段数量 As Long6 U3 S* U1 Z+ `. }0 R4 W+ {
  4.     Dim Obj圆 As AcadCircle, Obj直线 As AcadLine, DblArr圆心(2) As Double, Var点 As Variant
    , c/ q: s' k3 R* y% G: k! h# i
  5.     Dim Lng顶点循环变量 As Long, Lng计算分段循环变量 As Long, Dbl夹角 As Double" a" Y5 p3 G$ |4 ]
  6.     Dim DblArr优化多段线顶点() As Double: ^3 h, i7 I/ l( b. V
  7.     - m7 x5 t4 t9 `4 {
  8.     '设定优化多段线顶点数量,通常不大于5009 {& W% R5 J/ g7 H  ?
  9.     Lng优化多段线顶点数量 = 101
    , c& `/ Q2 _9 b# ]
  10.     '设定相邻顶点间计算分段数量
    1 I* q! I; p$ `& o
  11.     Lng相邻顶点间计算分段数量 = 56 W8 _5 Y% t' H1 L# y
  12.     '数值越大,优化多段线精度相对越高,但运行时间越长
    + Y5 H* n, M; |# I1 h
  13.    
    + s: S% K, {' T
  14.     '按顶点数量重定义数组
    % l8 c* X% s- _# \9 a
  15.     ReDim DblArr优化多段线顶点(Lng优化多段线顶点数量 * 2 - 1)$ j( U4 j1 h! z# `
  16.    
    + e: d: C( ?% g, V& Q
  17.     '已知条件
    7 J- o  M  r" B: e4 F
  18.     Dbl最小半径 = 250: Dbl最大半径 = 700: Dbl最小夹角 = 27: Dbl最大夹角 = 45% X7 g" S# P1 e
  19.    
    / T# T2 c9 a/ H
  20.     With ThisDrawing
    1 N' E6 m7 E; \' D, e2 d+ r
  21.    
    1 B5 ~( K& T" @8 M
  22.         '以坐标原点为圆心,最小半径为半径画一个辅助圆,其半径做为变量在以后计算中还要逐步更改
    ! O8 y9 M. @, q, b, {9 w1 ?, t9 l
  23.         Set Obj圆 = .ModelSpace.AddCircle(DblArr圆心, Dbl最小半径): r6 h6 H- A( D) e
  24.         . n* j" u. H& w3 ^* T" h. K
  25.         '复制圆,做为结果显示
    4 k2 T- m# m# ?- N- Q
  26.         Obj圆.Copy' e  j: X1 H( z! R6 y/ h
  27.         3 z5 G. S, K$ {- c$ L
  28.         '圆心右侧最小半径长度处为优化多段线起点
    ; q7 `1 k+ z8 N  _) f2 c$ L$ ^# |
  29.         Var点 = .Utility.PolarPoint(DblArr圆心, 0, Dbl最小半径)
    3 n2 k6 Y" E3 q# c
  30.         
    2 {# h9 Q/ D6 k' w* m  y- {
  31.         '记录优化多段线的第一个顶点(起点)坐标
    9 P: P& w$ W" P
  32.         DblArr优化多段线顶点(0) = Var点(0): DblArr优化多段线顶点(1) = Var点(1)
    ) ?6 G" X! ^3 m  w
  33.         8 {' U" I8 h( G
  34.         For Lng顶点循环变量 = 0 To Lng优化多段线顶点数量 - 24 V6 P9 r5 Y: w6 A
  35.             For Lng计算分段循环变量 = 1 To Lng相邻顶点间计算分段数量
    ) u+ O0 J& ?7 S
  36.             
    ) h) A2 R- e0 V" l* G! |2 E
  37.                 '按半径计算夹角1 _: O0 q: ]' n
  38.                 Dbl夹角 = (Obj圆.Radius - Dbl最小半径) / (Dbl最大半径 - Dbl最小半径) * (Dbl最大夹角 - Dbl最小夹角) _
    9 w+ K% F! C- _$ }
  39.                   + Dbl最小夹角$ F, a% L# @/ R  ]8 E3 B
  40.                 - s+ N5 o% J' X& l1 }# q
  41.                 '以曲线上一个计算点为基点,用极坐标方法在规定角度和适当长度(按500,保证与圆相交)取点$ M8 Z$ H. O  y# T4 @/ c
  42.                 '以曲线上一个取样点为起点,上面取到的点为端点画辅助直线& ?' W( w" L8 C7 u1 D7 V  O
  43.                 Set Obj直线 = .ModelSpace.AddLine(Var点, _# y0 U  ~( v( v, j0 [
  44.                   .Utility.PolarPoint(Var点, _' x5 `) x$ ?" C/ a6 L! {
  45.                     .Utility.AngleToReal(90 - Dbl夹角, acDegrees) + .Utility.AngleFromXAxis(DblArr圆心, Var点), 500))& b$ L, B, e! `% B% n4 ]3 l
  46.                             $ `# Y; C- d( {3 U0 N" V
  47.                 '辅助圆半径增大一个增量单位0 J* Q2 q/ P3 j9 c; Y1 b  K  B
  48.                 Obj圆.Radius = (Lng相邻顶点间计算分段数量 * Lng顶点循环变量 + Lng计算分段循环变量) _6 d1 F, R, T  W2 N( P! Z8 n* l6 U
  49.                   / ((Lng优化多段线顶点数量 - 1) * Lng相邻顶点间计算分段数量) _  D+ |' ]" T& K( N5 ?
  50.                   * (Dbl最大半径 - Dbl最小半径) + Dbl最小半径/ V) r" @8 s* O$ i  _, v* e
  51.                 5 ?- n' a6 \. s$ y$ A: J1 O$ O
  52.                 '获得辅助直线与辅助圆的交点,即为本次循环要找的取样点+ z4 @9 R% W* x# j' `
  53.                 Var点 = Obj直线.IntersectWith(Obj圆, acExtendNone)5 L! s3 O7 {: [6 Y+ \3 j$ G  r3 O
  54.                
    - f$ d. p% ?+ P0 i2 e
  55.                 '删除辅助直线
    * l/ p$ }/ M0 I. g! P0 y& Y7 C6 O0 d
  56.                 Obj直线.Delete
    ; d! B0 l- I' D3 y, W& _' m
  57.             Next/ a( A( t) g9 I; {+ A0 t
  58.             4 a% t' Q9 L8 p% ]8 m
  59.             '记录顶点坐标
    ; ]5 f; f+ U8 o$ h( ^! e9 D3 l
  60.             DblArr优化多段线顶点(Lng顶点循环变量 * 2 + 2) = Var点(0): DblArr优化多段线顶点(Lng顶点循环变量 * 2 + 3) = Var点(1)- H; m' S/ [( i& c
  61.         Next3 n4 V! j- X6 W" s, _7 V
  62.         
    ( |; c/ |# E& b
  63.         '画多段线
    ' i+ E( Q3 c( X5 v
  64.         .ModelSpace.AddLightWeightPolyline DblArr优化多段线顶点( k! x7 f2 F3 T3 ?/ U1 {
  65.     End With
    3 z6 E# a/ e0 d$ J! z0 z; H8 ~0 l
复制代码
发表于 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 )

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