QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 4761|回复: 32
收起左侧

[已解决] 圆的画法

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

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

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

x
已知弦长与弧长,如何画圆
发表于 2008-9-24 17:08:33 | 显示全部楼层 来自: 中国云南昆明
你的弧长是大于1/2圆周还是小于(大于和小于出现两个结果的)?弦长是肯定小于直径的,等于直径你就不会问了! 你还缺一个条件:要么是对应角度,要么是周长!下图到底是哪种?如何是好?
1 U9 |; c0 I: `! M8 d5 f2 M5 [4 ^7 x8 }9 M7 a% c: H
[ 本帖最后由 914438418 于 2008-9-24 17:12 编辑 ]
001.jpg

评分

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

查看全部评分

发表于 2008-9-24 17:43:26 | 显示全部楼层 来自: 中国浙江温州
按实际来说,你说的条件本来可以确定一个圆了,但是AUTOCAD好象没有相关的命令,所以很难直接做出来,
& U; D" m8 t8 c7 I& K        有一个很笨的法子,画出已知直线,以直线两端随便画一个弧,选中这个弧,在工具-查询-列表显示中可以看到它的弧长,根据与已知弧长的差别进行拉动,反复查询,对比,拉动,最后得到想要的弧,就可以求出圆了.
' b9 s; M/ q5 D9 C/ Y1 W    想看到比这个办法更高明的办法,期待中.

评分

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

查看全部评分

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

回复 2# 914438418 的帖子

是前面一种,请指教.
发表于 2008-9-24 21:20:47 | 显示全部楼层 来自: 中国吉林吉林市
3#的办法是可行的,不过要采用2005llnn的"精确选点法",就更容易了。
1 y, h0 G4 T" K比如:要做一个弦长为4,弧长为8的圆,可以先做一个弦长40000的直线,再拖动调整弧长为80000的弧,很容易精确到个位,然后缩小10000倍,相当于精确到小数点后4位。9 Z+ E2 g( w; N* v5 T
根据所需要的精度,依此类推。
4 A5 k7 p3 O: H. A0 P  ? - h! r0 T  N; Q; ?& o- S* Y" d5 h
参考贴子0 _" ~5 m* C* x/ }& X* Y$ T
http://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.gif3 E- k6 @2 Q, B5 l  @
老老实实计算出相应的半径和圆心角,画起来也是很快的,而且准确。

# B7 i1 r1 y$ s( G0 w8 r; |- Z
. @* a+ Q# j. {2 r  `  R. c我也是这么弄的..........$ [( r% q* h' `6 R
看来我们都太规矩了点..., D1 M1 Q- W4 c5 c6 H& T) t
不知变通啊
 楼主| 发表于 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 | 显示全部楼层 来自: 中国云南昆明
我有个方法供大家参考,只是个想法,正确性请大家指教!如图,做直线的垂直平分线,镜像后,看那个菱形,调整角度到四个角相等的时候就是圆了 !角度是可以测量的!
6 @0 l* Z5 @) B/ ^* |6 P4 m$ X7 a. a
[ 本帖最后由 914438418 于 2008-9-26 11:30 编辑 ]
001.jpg
发表于 2008-9-26 13:26:01 | 显示全部楼层 来自: 中国辽宁营口
VBA代码:* W! G5 u: t% b" h
------------------------------------------------------------------------------------------------------------------------
/ ~+ s- n$ l0 l8 \" B! O$ }2 MDim S1 As String, S2 As String$ ?- \. B, H$ z0 d# W+ b
Sub H()
0 ]( o9 W2 a1 h" l; a    Dim Space As Object, P As Variant, P2 As Variant, L As AcadLine' s' u. Y; e) y- ^! [
    Dim A As Double, A1 As Double, Ag As Double, Ag1 As Double, Ag2 As Double, R As Double8 X: Z' ?' J8 V4 f) T; w4 F$ k8 K
    With ThisDrawing/ n9 ~% p% f+ o! C* v0 p( x
        If .ActiveSpace = acModelSpace Then
) L* M, l# I! ?7 P4 U, S            Set Space = .ModelSpace& V/ o; E0 {; H* O, X; n0 [, A
        Else7 a3 o$ J1 W: X9 R
            Set Space = .PaperSpace% T) i7 m) L- P. B6 p3 D/ A
        End If
) Y; T7 V# x4 \% G/ g( L- Y        On Error GoTo 10; d( s3 _& X, @9 y' Y
        P = .Utility.GetPoint(, vbCrLf & "指定弦起点:" )
$ s$ s9 u' q$ X/ @9 v) \! H! o        On Error Resume Next
) P" ^5 G$ p  b3 r/ a3 v        Do
' p  Y! ?2 I+ k- e            Err.Clear3 O+ X% q! Y% q; R" H
            .Utility.InitializeUserInput 0, "Y N"
' B3 B% a/ W, |+ _$ A9 f5 n            P2 = .Utility.GetPoint(P, vbCrLf & "指定弦端点或[保留弦(Y)/不保留弦(N)]<N>:" )1 ?" m: d! w' H: l
            
  i7 g9 s. m7 T  T            If Err.Number = 0 Then8 c( l9 C0 [: X6 i4 e
                Set L = Space.AddLine(P, P2)
. ?: q: M% B0 @, D                Do" Z/ \% v$ g' b
                    Err.Clear% U! K9 R; K, }2 ?# i
                    .Utility.InitializeUserInput 6, "A C"
* i3 o. Q( D% O0 \# t                    A = .Utility.GetDistance(P, vbCrLf & "指定弧长或[画圆弧(A)/画圆(C)]<C>:" )
; e' ]2 N( _7 h3 E4 @                    If Err.Number = 0 And A > L.Length Then
2 |2 O5 y- A- B) t3 a4 r                        Ag2 = 3.14159265358979( }+ H: U! W# g5 X6 V
                        Do: \5 }* H7 I6 t  G0 w
                            Ag = (Ag1 + Ag2) / 2#
( A, ~. d# V: r% J$ @                            A1 = Ag * L.Length / Sin(Ag)
4 o: L  l$ W- {7 d                            If A1 = A Or Ag = Ag1 Or Ag = Ag2 Then Exit Do9 z# f) l+ C; r9 I* U
                            If A1 > A Then
1 _4 s9 Z1 B! Z& A7 W- C% X/ C& U                                Ag2 = Ag
) t+ J. d" U, w/ G8 S. _                            Else2 x+ z& I6 @" k2 ~
                                Ag1 = Ag7 t! t! h4 X$ H
                            End If
  C  S+ c$ l4 t. L                        Loop% b$ K2 p2 j( \9 K2 L
                        R = A / Ag1 / 2#
( ^* q. c" ?) o                        P = .Utility.PolarPoint(P, L.Angle + 1.5707963267949 - Ag, R)
8 Z" ?# v& H8 |0 L; m4 {' f$ p                        If S2 = "A" Then. V0 R5 Q  n% K
                            Space.AddArc P, R, 4.71238898038469 + L.Angle - Ag, 4.71238898038469 + L.Angle + Ag
6 I9 ~& S0 [" W( h/ L& a9 v                        Else
- A. W3 F% C- l! x& ]- A& u* ]                            Space.AddCircle P, R! G: v* D- X4 j) m+ g8 f
                        End If" B& V. v7 e% U7 ^( f- P' @
                        If S1 = "N" Or S1 = "" Then L.Delete
2 d8 D2 u, h4 A$ h& z  w  P: V                        Exit Do
! K, E- f" L/ @) O8 Z' U                    ElseIf Err.Number = -2147352567 Then
5 N* g7 Q( I3 {4 |9 o) K                        L.Delete( b( l# m) [5 W. ]
                        Err.Clear
# N4 N9 J: o4 F3 _                        Exit Do
* u+ |. p' E- Y                    ElseIf Err.Number <> 0 Then
: f7 ?4 }! l/ X  `$ E8 ?1 E                        S2 = .Utility.GetInput, s% X& S! Z' T7 P# {& P% [* U' T" {
                    End If
9 Y% z0 I5 j5 ~7 b                Loop  H! a9 I% b0 A- l4 d6 L, ?3 ^
            ElseIf Err.Number = -2147352567 Then
3 L* D7 `* \, I/ _+ g6 b                Exit Do) @7 u: d; L2 @. n9 |! I$ ~
            Else3 r- v( j" e. Q  A- t: c
                S1 = .Utility.GetInput! B9 K2 [3 o( f4 h6 f
            End If
# V6 _% z( j. I! I        Loop Until Err.Number = 0( N& R* q( c- t6 r, G: k7 [9 ~+ L  x
    End With: v2 p& H5 R; ^
10: End Sub8 C: A% ^5 g+ r. ^7 I: C$ P
------------------------------------------------------------------------------------------------------------------------8 O3 U, v8 b5 D- O  F$ C+ q+ V
使用方法:) k; M) U4 y+ z( [" B/ x8 M( p
1.把上面代码粘贴到VBA编辑器Thisdrawing代码窗口,或下载附件解压后加载
5 o; h8 e+ X+ f4 D" K+ G2.Alt+F8,在弹出的"宏"对话框中点运行按钮,或在命令行键入"-vbarun",回车,"H",回车
. c4 C- H9 p' I. b" O- f3.按命令行提示操作

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

7.67 KB, 下载次数: 13

评分

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

查看全部评分

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

回复 16# bbgk 的帖子

记得在初中的时候算好像还有一个条件是:那条边到直径的距离的条件的!如果非要算数算。怕是要用积分了!你要再给出一个条件的。现在条件不足!" w7 @/ i, I! o
7 Q6 g+ j% W% B6 d$ q
[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏徐州
这问题应该简单吧!9 R. S5 M6 X  R5 l( q! o. `
! N) y. g; l, R% l
命令 :c! J, ?  w. T' z2 x
命令:3p/ ~5 r. B) {% i- r# [- s
第一点在A点
. _# Q2 D# t4 L: I第二点在B点
9 J1 m; {) \/ F命令: tan; o. H4 j% A- n. N. m
在圆弧上任意切一点8 p3 l- G: J/ ^
OK
& I: u# \' G% o( j6 L- r; i8 L3 V) f- C9 d# H
不知是不是楼主说的意思
$ m+ `7 R, j# j6 [4 L( m7 p6 f" K1 ~, A8 U9 W
% l; Y! X: ~# b& E8 ^( h
SANDIANYUAN.JPG
- _1 W; g( U' e3 u2 j6 s9 q! n) `
, u5 w; O1 x! J# ~: g[ 本帖最后由 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
; D. s: {1 p' f8 K9 }0 {3 U这问题应该简单吧!6 p0 @( A7 E7 Z2 }$ ]; Q3 n

8 n) P& h6 @4 V命令 :c- M$ V# X1 R$ ~' |1 n( w) X
命令:3p
- B' a, n/ ?# f( i: n: S. x6 |6 w: h第一点在A点2 N( M; j0 O" K
第二点在B点" W# U1 p: O( r- V  W# r; I
命令: tan0 q/ C2 F) z! j: J- K1 W
在圆弧上任意切一点
* y+ K$ W% S; Q& b  a# C/ WOK6 c2 t" b3 Q' S: D3 i) `

6 s+ ]/ @6 o' ]+ K, ]" F) U不知是不是楼主说的意思
8 K6 A9 ^1 |: }) Y0 u' ~4 {
4 a/ a& f, k* d+ \0 q1 Q: X, D. P! B
, o# r4 q+ X8 g; l, |995240

0 e+ m$ l0 V" A+ g咋就没想到3点画圆法呢,我真是笨死了!谢谢你!
发表于 2008-9-27 22:53:20 | 显示全部楼层 来自: 中国陕西西安

好东西好东好东西

好东西好东好东西

评分

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

查看全部评分

发表于 2008-9-28 09:25:30 | 显示全部楼层 来自: 中国上海
本要在此表示道歉...+ K% A9 F5 A( Q  e
没有考虑清楚就说这个自己用算的...
+ T, V" p: M# _后来算了一下发现没那么好算.对大家带来的麻烦表示歉意.* _, d% G% h9 C
后来多方求教和查资料.总结一下可以按如下计算.+ W5 P' X1 C+ E# L# D2 e1 C5 E
设弦长为2a,弧长为2b,对应弧度为2x.半径为r1 E6 h, y4 `2 d
则有:sinx=a/r,
& h, e2 ^8 q1 C) q6 ]2b=2x*r
" m  N% ]3 W- @, p4 i4 u可得:sinx=x*a/b
2 q5 H# H4 e3 {1 a% M6 x这个方程解法相当麻烦.
5 u; ^6 ~) o& j1 x最准确同时也是最麻烦的解法是使用傅立叶级数.
$ Z% B! n) X: M( {但研究下来发现有其他的近似办法:( w! F0 p4 W( I. d% N8 O
1. 采用画图法:画出y=sinx和y=a/b*x两条函数曲线,交点处的x值及为所得.应该有2点.一个为小半弧,为一个大半弧6 S: [$ j% B) @" ^8 F1 M" _$ U2 l4 |$ n
2. sinx采用无穷级数展开.sinX=X-X3/3!+X5/5!-X7/7!.....考虑到精度问题这么多应该是够用了(X3表示X的3次方,这里不知道怎么标上标)
0 {7 R- _' j& k" O* i
2 Q7 P( c7 B2 y0 m- F; x以上就是方程的解法.../ B  ^& `0 ^$ X" K0 y' I3 s
和老大的给的宏那个好用大家自己看看吧.
: C+ T; `! Z6 K* Q4 N/ n' N+ Q( ?
想问下xuj321123的方法是如何确定弧长的.我在使用到tan命令时点选空白的地方是没有用的.只有选一个本来有的线.这样弧长就和我所选的线位置相关,而不是一个确定的值了....

评分

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

查看全部评分

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

0 p* K7 j8 y9 G  H$ Z) A  M# ^& G" Z: D9 l4 v$ u' E; ]8 b. Y
你做一条辅助线,分别交于已知的两条线,三点画圆法就可以了,TAN命令都不要用!
发表于 2008-9-28 12:20:20 | 显示全部楼层 来自: 中国山东青岛
这个二次开发好像很难的样子。。。
8 F2 J( B) q) G) u( s0 Z/ Z7 S- D7 h  s8 o4 W8 w# k
这个圆弧按照楼主的意思好像并不是完全已知的,只知道弧长而已,哪来的三点
发表于 2008-9-28 12:27:32 | 显示全部楼层 来自: 中国上海
原帖由 xuj321123 于 2008-9-28 10:04 发表 http://www.3dportal.cn/discuz/images/common/back.gif8 K$ R$ o* S& t4 p
楼上的朋友,楼主说的很明白:已知“弧长”和“弦长”,有这两样你作不出图来?怎么是个空白地? :L

, c5 a* Z: [2 l6 c: m* Z% [2 @- m1 ~4 S" g7 n
研究了一下你的画法.
" O# w# H" G6 }2 ]3 T不知道顺序是不是这样的
3 W1 D$ f! _* v2 l1 H
+ o5 [! {2 A: @: v先画好一个线段.长度等于弦长,再画一个弧,长度等弧长.
' {3 K) z8 k& V- @' ^" Q再利用这2条线使用3点画圆法,画出圆来., A- {2 Z6 Z3 K: L9 `/ d/ K

, V) L6 s: y7 S% H  e我画的时候没有先画那个弧,直接在一条线段上画圆的2个点. 没有实体可供tan ,所以画不出来,提示点无效.( ]0 q+ f1 q7 u' ^+ D

7 L# v' d, ~) T$ M/ D9 G. N问题是,你事先画好的弧如何保证他的弧长是楼主所需要的弧长?
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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