QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
5天前
查看: 4799|回复: 32
收起左侧

[已解决] 圆的画法

 关闭 [复制链接]
发表于 2008-9-24 16:35:42 | 显示全部楼层 |阅读模式 来自: 中国江苏南通

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

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

x
已知弦长与弧长,如何画圆
发表于 2008-9-24 17:08:33 | 显示全部楼层 来自: 中国云南昆明
你的弧长是大于1/2圆周还是小于(大于和小于出现两个结果的)?弦长是肯定小于直径的,等于直径你就不会问了! 你还缺一个条件:要么是对应角度,要么是周长!下图到底是哪种?如何是好?% X0 F4 G2 \: s( S3 v" f
7 B/ a/ [; {* y0 n7 N/ V
[ 本帖最后由 914438418 于 2008-9-24 17:12 编辑 ]
001.jpg

评分

参与人数 1三维币 +5 收起 理由
唐昕晨 + 5 技术讨论

查看全部评分

发表于 2008-9-24 17:43:26 | 显示全部楼层 来自: 中国浙江温州
按实际来说,你说的条件本来可以确定一个圆了,但是AUTOCAD好象没有相关的命令,所以很难直接做出来,
8 T' \. P- k$ ]) }7 d! D        有一个很笨的法子,画出已知直线,以直线两端随便画一个弧,选中这个弧,在工具-查询-列表显示中可以看到它的弧长,根据与已知弧长的差别进行拉动,反复查询,对比,拉动,最后得到想要的弧,就可以求出圆了.+ @; ~- M3 m3 g0 x
    想看到比这个办法更高明的办法,期待中.

评分

参与人数 1三维币 +3 收起 理由
唐昕晨 + 3 技术讨论

查看全部评分

 楼主| 发表于 2008-9-24 18:51:17 | 显示全部楼层 来自: 中国江苏南通

回复 2# 914438418 的帖子

是前面一种,请指教.
发表于 2008-9-24 21:20:47 | 显示全部楼层 来自: 中国吉林吉林市
3#的办法是可行的,不过要采用2005llnn的"精确选点法",就更容易了。# J, C1 g" z9 y4 G
比如:要做一个弦长为4,弧长为8的圆,可以先做一个弦长40000的直线,再拖动调整弧长为80000的弧,很容易精确到个位,然后缩小10000倍,相当于精确到小数点后4位。
+ j% _. V1 e4 [% [根据所需要的精度,依此类推。
3 [$ [. P  _8 E+ A, ?
- {; Q7 {& \! j0 B* p参考贴子
' _2 G4 u0 K9 P9 w; i  lhttp://www.3dportal.cn/discuz/viewthread.php?tid=201404&highlight=%BE%AB%C8%B7%D1%A1%B5%E3%B7%A8
发表于 2008-9-25 10:00:00 | 显示全部楼层 来自: 中国上海
老老实实计算出相应的半径和圆心角,画起来也是很快的,而且准确。
发表于 2008-9-25 12:37:24 | 显示全部楼层 来自: 中国上海
原帖由 lhf999 于 2008-9-25 10:00 发表 http://www.3dportal.cn/discuz/images/common/back.gif: S, d/ S' e: A- r( _9 ]
老老实实计算出相应的半径和圆心角,画起来也是很快的,而且准确。

5 @% \. X& Y5 Q& j( P8 k. P" u& N$ B: F* f9 Y) @! H8 E
我也是这么弄的..........- _* `: x9 R- p7 _3 M9 D  O
看来我们都太规矩了点...* n0 K& m% D7 }! M( x5 |) E
不知变通啊
 楼主| 发表于 2008-9-25 17:58:41 | 显示全部楼层 来自: 中国江苏南通

回复 6# lhf999 的帖子

请问半径与圆心角怎么求呢?我问了好多人了,没有答案
发表于 2008-9-26 07:09:49 | 显示全部楼层 来自: 中国浙江温州
顶起来,不要沉了,偶也想知道计算方法,6楼和7楼既然知道,就请贴出来,大家学习下.
发表于 2008-9-26 09:08:34 | 显示全部楼层 来自: 中国山东聊城
呵呵,我只会笨办法,看来还是学艺不精啊,不懂变通
发表于 2008-9-26 11:25:37 | 显示全部楼层 来自: 中国云南昆明
我有个方法供大家参考,只是个想法,正确性请大家指教!如图,做直线的垂直平分线,镜像后,看那个菱形,调整角度到四个角相等的时候就是圆了 !角度是可以测量的!: l, ^+ V/ x5 H. {+ D# D8 ]

4 S3 x9 Y- R: i8 ?; y[ 本帖最后由 914438418 于 2008-9-26 11:30 编辑 ]
001.jpg
发表于 2008-9-26 13:26:01 | 显示全部楼层 来自: 中国辽宁营口
VBA代码:
& f/ E2 A) m3 l4 g------------------------------------------------------------------------------------------------------------------------" g' W$ Q! Q4 V4 L
Dim S1 As String, S2 As String
4 K% l9 v$ U0 M" M  r/ u5 lSub H()
7 {# y$ g1 c7 o& m, O- n    Dim Space As Object, P As Variant, P2 As Variant, L As AcadLine
; ]+ T# [7 W! n6 g    Dim A As Double, A1 As Double, Ag As Double, Ag1 As Double, Ag2 As Double, R As Double
% q6 k/ w2 ]. F7 D4 p5 @, L    With ThisDrawing9 B! L0 _# G; i7 g( n: f( P9 K
        If .ActiveSpace = acModelSpace Then
. h& X3 h* x4 P# M3 ?! e$ g            Set Space = .ModelSpace
6 R3 b8 v' Z3 e* Y- E! _+ C        Else
6 F7 {4 d, P; s7 N1 q- f            Set Space = .PaperSpace
. _# J! z( D" R; g        End If+ ]/ \! {' ^% g* m# M
        On Error GoTo 10
6 D% Z4 e( i4 k) o; R- W0 D        P = .Utility.GetPoint(, vbCrLf & "指定弦起点:" )
9 f& W& |7 X' g. [  j2 a        On Error Resume Next
) r2 F' k' _' a) A9 @- U* y, @        Do
6 b) f% {. V' J4 ]% {9 {            Err.Clear
. j, O# \: f8 m/ [$ D+ ]. s            .Utility.InitializeUserInput 0, "Y N"
& ~/ L( m' v2 _  W. _            P2 = .Utility.GetPoint(P, vbCrLf & "指定弦端点或[保留弦(Y)/不保留弦(N)]<N>:" )
7 q8 P& Y% d3 E4 X            ; V4 k; T3 _$ J; I: I3 p) K4 F
            If Err.Number = 0 Then
9 Q& ]4 m2 \% s                Set L = Space.AddLine(P, P2)
5 E5 r0 N: T( B3 x! r                Do$ P6 v- y9 v6 T4 ]+ ?' s: x
                    Err.Clear
. Q# P4 b, }  @                    .Utility.InitializeUserInput 6, "A C"( s1 q& b* V# T$ Z0 ]+ L
                    A = .Utility.GetDistance(P, vbCrLf & "指定弧长或[画圆弧(A)/画圆(C)]<C>:" )
1 D$ F5 f( d4 X# e/ N0 T4 r; ]* h                    If Err.Number = 0 And A > L.Length Then
$ ?2 T% L0 I& }" y) v* w                        Ag2 = 3.14159265358979
  i& z* ~) N$ q: O+ d6 l# \7 d5 l' ~                        Do- `$ A5 [* x: h2 {8 n
                            Ag = (Ag1 + Ag2) / 2#
* ^) W" Z# ]0 x- h8 B                            A1 = Ag * L.Length / Sin(Ag)
6 Z% J( _5 ]3 x- K/ D                            If A1 = A Or Ag = Ag1 Or Ag = Ag2 Then Exit Do! [" i( u( F3 v$ G- y. l5 [8 A
                            If A1 > A Then
" R3 H  ?* _* `1 N3 f( }/ J! a                                Ag2 = Ag8 G& s: C8 O1 k) g
                            Else
" L; ~7 b- L+ Z/ s' Y7 ^- O                                Ag1 = Ag
: n3 k: N9 U/ \3 U  z( l                            End If
8 Y1 P8 R' W; Z% |                        Loop. L: G3 Z9 J( x0 c1 |  H: h+ u
                        R = A / Ag1 / 2#! I, Y7 h% i8 _1 x( W
                        P = .Utility.PolarPoint(P, L.Angle + 1.5707963267949 - Ag, R)3 B( V, }( {6 }4 Z2 I1 E
                        If S2 = "A" Then  w4 S) f2 S  G% ^+ T
                            Space.AddArc P, R, 4.71238898038469 + L.Angle - Ag, 4.71238898038469 + L.Angle + Ag
: g" ^) u- x+ C0 C4 e3 B* Z                        Else6 m2 w/ H% {9 S+ T8 _; v
                            Space.AddCircle P, R
% {8 v" u3 V  v' |4 K' R- D                        End If
0 r4 i+ @/ w8 S' o                        If S1 = "N" Or S1 = "" Then L.Delete( x, h! ^, z1 r; {! @3 }" h+ v
                        Exit Do
5 Y4 T8 `* k+ g                    ElseIf Err.Number = -2147352567 Then' R5 V; A3 a, A2 o1 [
                        L.Delete& P+ W* i+ n; r% o: Q
                        Err.Clear
7 A1 s1 o% V! w+ S7 a: t; i                        Exit Do5 Y6 l# p$ _# u0 b8 e
                    ElseIf Err.Number <> 0 Then4 V4 c3 e+ x6 W! I) Y& Q
                        S2 = .Utility.GetInput" t9 i/ s9 w, t) {/ P6 n
                    End If1 o7 W. G% K# G0 N
                Loop" T9 c) f% B% I$ E6 L& F0 a, v8 M
            ElseIf Err.Number = -2147352567 Then
2 S6 {3 S  Q- ~$ z9 @  F7 q                Exit Do
8 G/ t9 \" f* _( f/ ^, k            Else) L$ C" y/ J5 n) Y1 [8 `
                S1 = .Utility.GetInput
) D5 r. @5 q$ {: D2 y9 u& D) s! s            End If. _5 i* G( o  K
        Loop Until Err.Number = 0) L" B3 a/ K+ l! }8 ~
    End With
7 [, C" z% o: I  H10: End Sub, s" |1 J3 o5 d$ m8 i7 W
------------------------------------------------------------------------------------------------------------------------3 k; |/ L3 H" Y& j3 ~1 ?
使用方法:# G# T4 _$ L  q% k4 n' D
1.把上面代码粘贴到VBA编辑器Thisdrawing代码窗口,或下载附件解压后加载
9 R7 ~- r7 `; p, z% u* ~2.Alt+F8,在弹出的"宏"对话框中点运行按钮,或在命令行键入"-vbarun",回车,"H",回车" Z. \" O& u& x* R5 F
3.按命令行提示操作

根据弦长和弧长画圆弧.rar

7.67 KB, 下载次数: 13

评分

参与人数 1三维币 +10 收起 理由
★新手★ + 10 应助

查看全部评分

发表于 2008-9-26 13:29:46 | 显示全部楼层 来自: 中国浙江温州
楼上的办法可以是可以,但是还不是那种用计算得出的结果,期待那两位可以计算的高手把方法贴出来,大家都学一招,先谢了.
发表于 2008-9-26 13:47:23 | 显示全部楼层 来自: 中国云南昆明

回复 16# bbgk 的帖子

记得在初中的时候算好像还有一个条件是:那条边到直径的距离的条件的!如果非要算数算。怕是要用积分了!你要再给出一个条件的。现在条件不足!
$ r+ s5 m. i5 }, t9 R  m2 V3 A9 z$ l
[ 本帖最后由 914438418 于 2008-9-26 13:50 编辑 ]
发表于 2008-9-26 14:04:51 | 显示全部楼层 来自: 中国浙江温州
还是版主高明,不过这种二次开发并不是什么人都可以做的了,只能拿来用用了,先下载了.谢了.
发表于 2008-9-26 15:13:22 | 显示全部楼层 来自: 中国浙江温州

回复 16# 914438418 的帖子

可是6楼和7楼的说法是可以算出来的啊,应该条件是够了吧,偶没学过微积分,关于这个就不懂了
发表于 2008-9-26 16:00:31 | 显示全部楼层 来自: 中国云南昆明

回复 18# bbgk 的帖子

用老大的程序啊!那个能搞出来!你非得要数学算想破脑袋也想不出来嘛!
发表于 2008-9-27 11:24:41 | 显示全部楼层 来自: 中国江苏徐州
这问题应该简单吧!
. }; l- V" Q( M  J9 W+ ]  ]; r! K/ O8 W% }' k
命令 :c
5 y8 R" i! i% ~2 R命令:3p" O# o1 N; M3 Z3 _  T* P
第一点在A点
" b: G6 T4 y# U- r3 s  W; o第二点在B点( m! g9 e0 K) ?9 a1 @
命令: tan
* a( a. D0 c  y. _( J在圆弧上任意切一点: P5 C' P! ^! {4 ?9 t
OK4 Q" ^  q" ~4 b

" m8 T. y3 m, w, C4 p) C, [% C不知是不是楼主说的意思
1 I- U  @" i2 k/ o$ R6 s2 |$ ^4 f  W6 y! [$ O
5 `6 l2 _7 c5 Q/ e  y: G8 z3 ~
SANDIANYUAN.JPG $ T# D$ U! H1 w1 d+ w; A' a

" T" P  I5 s' k* x[ 本帖最后由 xuj321123 于 2008-9-27 11:30 编辑 ]
SANDIANYUAN.JPG
发表于 2008-9-27 17:03:33 | 显示全部楼层 来自: 中国云南昆明
原帖由 xuj321123 于 2008-9-27 11:24 发表 http://www.3dportal.cn/discuz/images/common/back.gif
) c" e/ }3 w+ q/ R这问题应该简单吧!
" B" [/ f) c3 Y6 b$ u
' ~& {7 B1 c; w/ h+ S( y$ F, R命令 :c2 Y' A. l8 S7 A4 A& i) n1 m
命令:3p: {: w$ ?' |& d2 b+ C
第一点在A点
. |4 ]- M% p0 k2 e9 }. x( M7 _第二点在B点/ \* r2 M3 x0 \, V
命令: tan
8 b! {+ W) U- |# o) |在圆弧上任意切一点3 Y# t" W3 h& N  Z
OK, l( k7 p& A+ ]5 A* D  U7 B* Q

/ S. y: G# U. s2 z9 H不知是不是楼主说的意思" @# f3 H  k' e  G" n- l9 q

# C3 E0 r* a9 z* R8 G" o4 H0 F: ~
* C) G5 o7 y" u5 O- a995240

. h) a& i( d$ _$ M' g7 M. D/ t# `  v5 w; i- X咋就没想到3点画圆法呢,我真是笨死了!谢谢你!
发表于 2008-9-27 22:53:20 | 显示全部楼层 来自: 中国陕西西安

好东西好东好东西

好东西好东好东西

评分

参与人数 1三维币 -8 收起 理由
★新手★ -8 接连发3帖灌水!念你是刚注册,少扣点!警

查看全部评分

发表于 2008-9-28 09:25:30 | 显示全部楼层 来自: 中国上海
本要在此表示道歉...* A. S6 |/ j3 Y# i$ u  |( C7 _
没有考虑清楚就说这个自己用算的...
+ n. l) m/ r2 `" X9 a: t( s后来算了一下发现没那么好算.对大家带来的麻烦表示歉意.
2 J1 P& E) d1 p) c后来多方求教和查资料.总结一下可以按如下计算.! z) i0 s( v1 C8 w: \9 N" P  t
设弦长为2a,弧长为2b,对应弧度为2x.半径为r5 C- F8 u! V  M8 c3 t& E
则有:sinx=a/r,
% A0 i. b6 u1 M2b=2x*r# l7 P  d/ Q2 B; Q* i
可得:sinx=x*a/b
/ s* D6 S  ?- ^' N1 H这个方程解法相当麻烦.
- B! }- T; p. W' S' g最准确同时也是最麻烦的解法是使用傅立叶级数.
' |! v, Y; T/ H, s0 T+ N但研究下来发现有其他的近似办法:3 ]( e- i/ p; O4 P
1. 采用画图法:画出y=sinx和y=a/b*x两条函数曲线,交点处的x值及为所得.应该有2点.一个为小半弧,为一个大半弧
/ B& u4 U, B6 q- O$ m2. sinx采用无穷级数展开.sinX=X-X3/3!+X5/5!-X7/7!.....考虑到精度问题这么多应该是够用了(X3表示X的3次方,这里不知道怎么标上标)
5 ~$ V4 @( g8 b- ?" r9 K% Y: n% ]# Y5 c; {& z, r
以上就是方程的解法...3 e' V0 ]6 e  i7 T
和老大的给的宏那个好用大家自己看看吧.7 S. `0 B* F9 J3 {$ n1 f, l/ P

! J8 N0 |( W. w* j# T4 g: n& m想问下xuj321123的方法是如何确定弧长的.我在使用到tan命令时点选空白的地方是没有用的.只有选一个本来有的线.这样弧长就和我所选的线位置相关,而不是一个确定的值了....

评分

参与人数 1三维币 +5 收起 理由
★新手★ + 5 技术讨论

查看全部评分

发表于 2008-9-28 10:04:32 | 显示全部楼层 来自: 中国江苏徐州
楼上的朋友,楼主说的很明白:已知“弧长”和“弦长”,有这两样你作不出图来?怎么是个空白地? :L
发表于 2008-9-28 11:09:19 | 显示全部楼层 来自: 中国云南昆明
“想问下xuj321123的方法是如何确定弧长的.我在使用到tan命令时点选空白的地方是没有用的.只有选一个本来有的线.这样弧长就和我所选的线位置相关,而不是一个确定的值了....”
2 k( Q; L' ~1 G% J5 \9 r8 F. R2 M8 m

1 t  l4 E- J+ ]! l5 P: Z你做一条辅助线,分别交于已知的两条线,三点画圆法就可以了,TAN命令都不要用!
发表于 2008-9-28 12:20:20 | 显示全部楼层 来自: 中国山东青岛
这个二次开发好像很难的样子。。。
0 g" g3 P$ G. X5 J4 J5 w. |6 b7 |* g1 Z: ^0 O$ X9 j; f  U+ z' I) T
这个圆弧按照楼主的意思好像并不是完全已知的,只知道弧长而已,哪来的三点
发表于 2008-9-28 12:27:32 | 显示全部楼层 来自: 中国上海
原帖由 xuj321123 于 2008-9-28 10:04 发表 http://www.3dportal.cn/discuz/images/common/back.gif
, Y4 A/ _5 x) H# @2 Z. a9 h# L楼上的朋友,楼主说的很明白:已知“弧长”和“弦长”,有这两样你作不出图来?怎么是个空白地? :L

3 C$ _6 O& h( M9 [
1 {4 S: N4 d" J/ c& K+ q研究了一下你的画法.; e: j6 f7 Y& H; {# p
不知道顺序是不是这样的/ b- w+ D% D5 o7 y" b( H9 q

7 Y; U2 E# o1 L9 I# K先画好一个线段.长度等于弦长,再画一个弧,长度等弧长. # O& e& _# {) e/ c7 Y
再利用这2条线使用3点画圆法,画出圆来.
* Q- B- u8 Z/ J3 p( u# k: `( y! ?0 d- V2 L' P4 u) j
我画的时候没有先画那个弧,直接在一条线段上画圆的2个点. 没有实体可供tan ,所以画不出来,提示点无效.0 \& p/ v  d! }* i; @. M
6 m0 r3 k( M. D/ H* b
问题是,你事先画好的弧如何保证他的弧长是楼主所需要的弧长?
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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