QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

[已解决] 圆的画法

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

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

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

x
已知弦长与弧长,如何画圆
发表于 2008-9-24 17:08:33 | 显示全部楼层 来自: 中国云南昆明
你的弧长是大于1/2圆周还是小于(大于和小于出现两个结果的)?弦长是肯定小于直径的,等于直径你就不会问了! 你还缺一个条件:要么是对应角度,要么是周长!下图到底是哪种?如何是好?
# d/ ?3 t5 ^; O% S& C: w! W0 o* K& U& ?/ {2 \9 B1 E
[ 本帖最后由 914438418 于 2008-9-24 17:12 编辑 ]
001.jpg

评分

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

查看全部评分

发表于 2008-9-24 17:43:26 | 显示全部楼层 来自: 中国浙江温州
按实际来说,你说的条件本来可以确定一个圆了,但是AUTOCAD好象没有相关的命令,所以很难直接做出来,+ x" m1 e7 o6 l" H# @& x. i
        有一个很笨的法子,画出已知直线,以直线两端随便画一个弧,选中这个弧,在工具-查询-列表显示中可以看到它的弧长,根据与已知弧长的差别进行拉动,反复查询,对比,拉动,最后得到想要的弧,就可以求出圆了.
% L! _- j( D2 I    想看到比这个办法更高明的办法,期待中.

评分

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

查看全部评分

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

回复 2# 914438418 的帖子

是前面一种,请指教.
发表于 2008-9-24 21:20:47 | 显示全部楼层 来自: 中国吉林吉林市
3#的办法是可行的,不过要采用2005llnn的"精确选点法",就更容易了。
5 R) J2 r2 v5 |) d0 q比如:要做一个弦长为4,弧长为8的圆,可以先做一个弦长40000的直线,再拖动调整弧长为80000的弧,很容易精确到个位,然后缩小10000倍,相当于精确到小数点后4位。7 {. Z$ W5 T+ q1 p
根据所需要的精度,依此类推。
, z# R8 x4 U9 Q2 a % f8 O! J1 f2 c& }9 n8 }: E
参考贴子
) I4 p4 T/ Z. s* _/ M) 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
1 l( _9 s# q* M4 Z6 }老老实实计算出相应的半径和圆心角,画起来也是很快的,而且准确。

5 U0 I, m3 A, r$ E- ]3 {5 C7 T5 u- @3 G3 L
我也是这么弄的..........
& Z+ @, V! K+ A& m( t- p看来我们都太规矩了点..., W. N# L) q" p, g' ]9 M
不知变通啊
 楼主| 发表于 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 | 显示全部楼层 来自: 中国云南昆明
我有个方法供大家参考,只是个想法,正确性请大家指教!如图,做直线的垂直平分线,镜像后,看那个菱形,调整角度到四个角相等的时候就是圆了 !角度是可以测量的!' a$ H* D4 Z1 ?0 d, q% Q9 I" r8 ]
! ]+ N+ [0 B5 q8 A2 e
[ 本帖最后由 914438418 于 2008-9-26 11:30 编辑 ]
001.jpg
发表于 2008-9-26 13:26:01 | 显示全部楼层 来自: 中国辽宁营口
VBA代码:
- i8 ~0 L. T2 Y. Y------------------------------------------------------------------------------------------------------------------------
1 f1 }, m( \& b& h& JDim S1 As String, S2 As String/ X2 P, t7 H1 {1 V& @) F0 B# r
Sub H()
; q0 J' L. _' L) Y) p    Dim Space As Object, P As Variant, P2 As Variant, L As AcadLine
) B9 O  U9 ~2 @0 l1 F1 ?    Dim A As Double, A1 As Double, Ag As Double, Ag1 As Double, Ag2 As Double, R As Double4 z- c+ q9 C1 H4 U4 w2 l4 \* O& Q
    With ThisDrawing+ g) c. Z4 o3 @; J  c( d% \3 g
        If .ActiveSpace = acModelSpace Then
+ Y' T" X# w2 }4 V/ r* m            Set Space = .ModelSpace$ p1 U7 D! L- ^+ L# w
        Else
. x3 L. j% W) _( c$ j, x6 H( X            Set Space = .PaperSpace' s3 l2 S  W+ x2 T" A% E+ s+ S$ C# A
        End If% J, u9 D7 Q" i9 f% Z; O. P& v# J
        On Error GoTo 10  F! `% _$ w7 H. _: X$ M
        P = .Utility.GetPoint(, vbCrLf & "指定弦起点:" )6 Z" e$ s% C2 A2 j. `+ C
        On Error Resume Next
, y" Y- k, r$ I        Do
. j! `# j; B- Z" l- Z# p            Err.Clear
% ~/ r' a& @& V2 L4 i            .Utility.InitializeUserInput 0, "Y N"
) [( R9 Z5 h* l' o: k            P2 = .Utility.GetPoint(P, vbCrLf & "指定弦端点或[保留弦(Y)/不保留弦(N)]<N>:" )
6 k% B8 H# ]' h' [/ _7 y            * o" p! h  z4 V
            If Err.Number = 0 Then; Z+ G2 E! W  v) l
                Set L = Space.AddLine(P, P2)/ {) N9 Y  B. O  ~* ?; I
                Do
, t+ U# W9 a% U                    Err.Clear& @& o2 i: n; e1 I3 g+ ^
                    .Utility.InitializeUserInput 6, "A C"3 N: x6 \" O% E) K! \+ s5 [8 M
                    A = .Utility.GetDistance(P, vbCrLf & "指定弧长或[画圆弧(A)/画圆(C)]<C>:" )
: W/ @7 _# A( [" ?2 h, R                    If Err.Number = 0 And A > L.Length Then- x  C; |$ i3 r4 B8 o+ [4 p; r0 G9 l
                        Ag2 = 3.14159265358979' a. v( [0 N9 E/ H
                        Do) h) N" c3 _5 i9 f6 G/ M
                            Ag = (Ag1 + Ag2) / 2#& y0 }& F* F' f9 X, k& f- H
                            A1 = Ag * L.Length / Sin(Ag)5 [6 u9 K# _2 |* r
                            If A1 = A Or Ag = Ag1 Or Ag = Ag2 Then Exit Do  m/ X6 f2 @% @+ y
                            If A1 > A Then1 Z; @! r$ r! e8 `" S
                                Ag2 = Ag
. ]5 f4 c# k4 x! h4 g( D                            Else
$ V9 L* O2 l% Q( A5 K% u2 H3 j' u                                Ag1 = Ag
; b+ A, G1 j5 Q& [! [3 q' M                            End If: b- J5 H) D) i. j
                        Loop
6 D/ |, o: N2 H* }9 G2 X                        R = A / Ag1 / 2#7 C# I+ z5 v* O$ b* w) ]
                        P = .Utility.PolarPoint(P, L.Angle + 1.5707963267949 - Ag, R)! l- m6 I2 n( o+ _& ]$ y. b
                        If S2 = "A" Then) _/ w" I* |. |, P0 ?9 @  [( D
                            Space.AddArc P, R, 4.71238898038469 + L.Angle - Ag, 4.71238898038469 + L.Angle + Ag3 B" e! g+ B- u+ L) T
                        Else/ Z, C9 z6 Y) q) s# T
                            Space.AddCircle P, R  t& J7 _/ s9 W
                        End If
/ ?1 a. F2 t1 i0 g9 W                        If S1 = "N" Or S1 = "" Then L.Delete" ]8 B% \' a. W/ B4 S; f
                        Exit Do  v: b# \4 m  f8 b
                    ElseIf Err.Number = -2147352567 Then
9 z( |7 @# _4 O, j5 Y, D                        L.Delete, @: t# T  c7 U% _# H$ p; l; I4 U
                        Err.Clear1 G1 T2 e9 i! o$ M# v; N3 `
                        Exit Do
3 x& B' l, W% G; G& }9 }9 X                    ElseIf Err.Number <> 0 Then
" t; s% r& x; j/ Z+ t* O" _                        S2 = .Utility.GetInput. o2 Y. M; J* Y7 G$ A" E; m. \
                    End If
7 I5 W  C1 S) z# `: ?6 A                Loop5 t5 a, ~* t6 v' H  y' m
            ElseIf Err.Number = -2147352567 Then
4 Y7 Z. \! `* |, o  K( h( h: ^4 ]; E; T6 W                Exit Do, d0 t$ Z2 B5 H' m
            Else& u! ?( k# M# M3 j
                S1 = .Utility.GetInput
& r9 L* ^, P* J1 S            End If
' U5 b5 K3 s- Y% @8 h+ R  T        Loop Until Err.Number = 0
! _5 k" x4 g9 q, a, q( y, a    End With
6 f8 R" V- C8 f' F& w; _10: End Sub9 I5 a7 d9 ^* x; w2 j
------------------------------------------------------------------------------------------------------------------------. {( E" T0 \1 ]: ~
使用方法:
' q; o7 U' F- r4 t1.把上面代码粘贴到VBA编辑器Thisdrawing代码窗口,或下载附件解压后加载, v5 |& |$ t9 E; l' c
2.Alt+F8,在弹出的"宏"对话框中点运行按钮,或在命令行键入"-vbarun",回车,"H",回车; P3 D& A3 }4 Q2 P1 k" E
3.按命令行提示操作

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

7.67 KB, 下载次数: 13

评分

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

查看全部评分

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

回复 16# bbgk 的帖子

记得在初中的时候算好像还有一个条件是:那条边到直径的距离的条件的!如果非要算数算。怕是要用积分了!你要再给出一个条件的。现在条件不足!
; H9 L' R$ d: W6 S
- z1 X& }2 f. y0 r7 M5 W[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏徐州
这问题应该简单吧!
7 R5 A: K! g# [: w8 R5 l0 I9 j- V6 i. Q
命令 :c
3 ?2 s9 d" h0 p4 H0 A- |% ]命令:3p! W* h0 k; S( d# [: M
第一点在A点
4 q0 b( L$ E( C% E& y第二点在B点
) A; p, K2 W! p$ v1 b9 |! ?( n. f! y命令: tan. h! }' R! e! o( c8 v4 B- U  A
在圆弧上任意切一点
" p( `$ d8 w" n# M8 Q$ mOK5 ~( y4 g$ q" Y' w5 F/ M+ |
, u% `# q: {+ n! i  E
不知是不是楼主说的意思# u* E- z! y8 x. M: R4 O
* W  k2 c" }" m: X* F; }( R( ?% t

& c0 I- b) e5 P. I6 g) x) h' C SANDIANYUAN.JPG
: @8 P- C. Y. m: d, |7 _& [2 V: t' e4 V, g; ~7 o$ \
[ 本帖最后由 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
* Z, X6 O$ p: Q, f这问题应该简单吧!4 u/ ?2 k) M! Q  \) p5 ^6 e

! F6 }: s& E  k3 ~# W- j* P- G1 C7 [命令 :c" p# S# Q, S: A* Y6 ?. j' j6 k, H
命令:3p6 v% d8 j) }( g  V- p  m
第一点在A点
7 w8 l4 d1 C9 l& v5 V第二点在B点
8 R$ K+ g( x# o/ Z命令: tan
' h: d9 U* c  W+ f在圆弧上任意切一点
# Y% L/ K- m" A4 m% H8 \0 }OK
5 P% l$ l' W7 b- ^5 `
) i! T* A; Y. E2 B9 c, o不知是不是楼主说的意思6 H" I* h- N. a: r0 Y  s; p

) S/ a  b% P3 ^( v4 e* r/ [3 l* ^4 h( k7 |' k
995240

  Z) g7 r1 W5 V. ?7 [1 a咋就没想到3点画圆法呢,我真是笨死了!谢谢你!
发表于 2008-9-27 22:53:20 | 显示全部楼层 来自: 中国陕西西安

好东西好东好东西

好东西好东好东西

评分

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

查看全部评分

发表于 2008-9-28 09:25:30 | 显示全部楼层 来自: 中国上海
本要在此表示道歉...* O4 b7 R' r& x$ e
没有考虑清楚就说这个自己用算的...  r4 H4 N5 O4 n% R
后来算了一下发现没那么好算.对大家带来的麻烦表示歉意.
. v# R" R- ?$ M8 [6 y7 E5 u9 Q- i6 }后来多方求教和查资料.总结一下可以按如下计算.+ e/ @7 p7 l8 p3 E7 s+ I. }
设弦长为2a,弧长为2b,对应弧度为2x.半径为r
! W" _5 d' c; D4 Z则有:sinx=a/r,
/ z8 Y* G9 r& O. ^1 l. C4 h2b=2x*r
! N4 f2 Z9 Q. c/ {: p可得:sinx=x*a/b
$ R* A$ t) }7 m- J9 u这个方程解法相当麻烦.
' s+ a5 m0 x2 N9 c3 l! |最准确同时也是最麻烦的解法是使用傅立叶级数.
8 [; x2 r9 I# c" J' S8 v0 b/ f但研究下来发现有其他的近似办法:: r) i+ O! m6 {2 _1 S& M3 l
1. 采用画图法:画出y=sinx和y=a/b*x两条函数曲线,交点处的x值及为所得.应该有2点.一个为小半弧,为一个大半弧! q# H8 g% W/ [% B2 P3 @: z
2. sinx采用无穷级数展开.sinX=X-X3/3!+X5/5!-X7/7!.....考虑到精度问题这么多应该是够用了(X3表示X的3次方,这里不知道怎么标上标)' N! y0 i+ d9 }$ a9 S9 R
, E9 L- v$ l9 C4 E, U
以上就是方程的解法..." q  j: u$ P! H4 t- h
和老大的给的宏那个好用大家自己看看吧.
( \+ R; m9 s5 e5 @) r( }* I; r2 }* S9 ^3 C8 h6 M
想问下xuj321123的方法是如何确定弧长的.我在使用到tan命令时点选空白的地方是没有用的.只有选一个本来有的线.这样弧长就和我所选的线位置相关,而不是一个确定的值了....

评分

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

查看全部评分

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

: Q, |3 I8 ^; m: @8 I' I# |6 X7 J
你做一条辅助线,分别交于已知的两条线,三点画圆法就可以了,TAN命令都不要用!
发表于 2008-9-28 12:20:20 | 显示全部楼层 来自: 中国山东青岛
这个二次开发好像很难的样子。。。6 x. n8 D' S4 C  r8 k( W9 T
, Y: P# w" @9 @" Y
这个圆弧按照楼主的意思好像并不是完全已知的,只知道弧长而已,哪来的三点
发表于 2008-9-28 12:27:32 | 显示全部楼层 来自: 中国上海
原帖由 xuj321123 于 2008-9-28 10:04 发表 http://www.3dportal.cn/discuz/images/common/back.gif9 E" i, I5 L5 ^% [  t6 T
楼上的朋友,楼主说的很明白:已知“弧长”和“弦长”,有这两样你作不出图来?怎么是个空白地? :L
4 C, F, i! s% Z! y6 {
& ^9 z) g4 P' f6 r7 ^0 m+ b
研究了一下你的画法.+ |0 d( F( K0 `
不知道顺序是不是这样的3 c+ d) i- K: L. Y) c
" K% \; O$ v2 C# f( W. h: ?( v
先画好一个线段.长度等于弦长,再画一个弧,长度等弧长. 9 n/ K0 P# d9 h8 h8 ]
再利用这2条线使用3点画圆法,画出圆来.; H, \9 P8 l3 }8 E5 F$ ^
9 h% I. Z) o! h
我画的时候没有先画那个弧,直接在一条线段上画圆的2个点. 没有实体可供tan ,所以画不出来,提示点无效.4 ^3 ?$ I( T* U* r

2 G' x/ `) F" D# _# j. Y* x问题是,你事先画好的弧如何保证他的弧长是楼主所需要的弧长?
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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