QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

[已解决] 圆的画法

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

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

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

x
已知弦长与弧长,如何画圆
发表于 2008-9-24 17:08:33 | 显示全部楼层 来自: 中国云南昆明
你的弧长是大于1/2圆周还是小于(大于和小于出现两个结果的)?弦长是肯定小于直径的,等于直径你就不会问了! 你还缺一个条件:要么是对应角度,要么是周长!下图到底是哪种?如何是好?
6 M; j$ m3 }. }' a- g' q7 W0 N# w: y& F" }
9 ^% _* t2 b1 A! |+ l[ 本帖最后由 914438418 于 2008-9-24 17:12 编辑 ]
001.jpg

评分

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

查看全部评分

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

评分

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

查看全部评分

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

回复 2# 914438418 的帖子

是前面一种,请指教.
发表于 2008-9-24 21:20:47 | 显示全部楼层 来自: 中国吉林吉林市
3#的办法是可行的,不过要采用2005llnn的"精确选点法",就更容易了。6 l3 M1 W- y. U# y# {# I
比如:要做一个弦长为4,弧长为8的圆,可以先做一个弦长40000的直线,再拖动调整弧长为80000的弧,很容易精确到个位,然后缩小10000倍,相当于精确到小数点后4位。$ {$ g9 O8 p- W& G
根据所需要的精度,依此类推。
% V" X9 Q+ [( }" V
% R1 O  v9 l$ C. V参考贴子
8 k2 G8 h1 |% hhttp://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% z6 x! Z" k: |, U
老老实实计算出相应的半径和圆心角,画起来也是很快的,而且准确。
$ {% h# K+ E: }

4 M0 x. y! l3 e+ T我也是这么弄的..........
+ |, n2 j, I" y1 v看来我们都太规矩了点...6 P1 F$ C2 I  o: |
不知变通啊
 楼主| 发表于 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 | 显示全部楼层 来自: 中国云南昆明
我有个方法供大家参考,只是个想法,正确性请大家指教!如图,做直线的垂直平分线,镜像后,看那个菱形,调整角度到四个角相等的时候就是圆了 !角度是可以测量的!
4 f" Q7 i& y$ O+ M8 }6 @- n# z' w% K: Y3 i9 G( c; S" w9 K
[ 本帖最后由 914438418 于 2008-9-26 11:30 编辑 ]
001.jpg
发表于 2008-9-26 13:26:01 | 显示全部楼层 来自: 中国辽宁营口
VBA代码:
$ U7 V5 q2 y" p* v------------------------------------------------------------------------------------------------------------------------; g' q" ^  ?* Z) R
Dim S1 As String, S2 As String
; P/ u! n0 V3 g  z! `/ }; a. jSub H()0 Y$ k" `7 Y: Q! R: }
    Dim Space As Object, P As Variant, P2 As Variant, L As AcadLine
3 n, k4 S% ]- K+ c5 h: V# H    Dim A As Double, A1 As Double, Ag As Double, Ag1 As Double, Ag2 As Double, R As Double
, c  z8 s+ h: M0 P4 @- M  `6 @    With ThisDrawing
6 y4 T5 L7 t+ r; ]7 H        If .ActiveSpace = acModelSpace Then9 ?6 U( R; t+ ]3 J# _
            Set Space = .ModelSpace
; O* y& e6 q# l9 u" `        Else4 R  h* U8 K! H, o. g1 `
            Set Space = .PaperSpace
8 d$ D% v) V) F( L7 i        End If
4 n) D5 G+ @0 b4 O, D        On Error GoTo 10
5 P- {7 G7 s' K7 \        P = .Utility.GetPoint(, vbCrLf & "指定弦起点:" )! l% P  m: J: U" S
        On Error Resume Next
( _; |. n2 I- D9 g5 t$ Y        Do3 e% Q" U5 t; F9 h9 E0 f( H
            Err.Clear
) e$ X: w0 S3 b            .Utility.InitializeUserInput 0, "Y N"5 ^2 M3 v- V5 x% Q+ _
            P2 = .Utility.GetPoint(P, vbCrLf & "指定弦端点或[保留弦(Y)/不保留弦(N)]<N>:" )( k# d  f" [+ V. b2 \4 U5 x
            
8 X6 U5 U. }6 S) n0 X  W% B1 X. c            If Err.Number = 0 Then
: b' }- L$ j4 x: H                Set L = Space.AddLine(P, P2)" `( i* Q2 E, a7 \" J7 e9 B/ w
                Do. F  N; ^& H' ~6 v5 T# o. p
                    Err.Clear
) P2 B2 w* a+ y, q0 n- ]                    .Utility.InitializeUserInput 6, "A C"
2 P5 q3 M, i" \- i7 ]                    A = .Utility.GetDistance(P, vbCrLf & "指定弧长或[画圆弧(A)/画圆(C)]<C>:" )
2 U/ x) T" }4 A; x0 S" R4 P                    If Err.Number = 0 And A > L.Length Then
. _' g4 [/ r6 ^$ h3 H" f                        Ag2 = 3.14159265358979
6 Z0 x/ {# g! S% R6 I% s, c                        Do% K2 v7 H! V+ _8 \
                            Ag = (Ag1 + Ag2) / 2#2 S# {+ H) T4 b/ M, @; `0 a
                            A1 = Ag * L.Length / Sin(Ag)
& L$ T& S2 T" Q3 }- O+ @% g' q                            If A1 = A Or Ag = Ag1 Or Ag = Ag2 Then Exit Do
3 G* X4 m4 T! n! Y9 r6 K9 x- k                            If A1 > A Then. [) T: B0 W9 k
                                Ag2 = Ag- g$ D& ]6 H1 s4 S, e, [
                            Else
9 z! H- \: @/ s: u5 p; f2 r4 J                                Ag1 = Ag
* O: _$ M( P% O" g                            End If
/ p- g8 n+ k1 |0 ]( H' o8 P                        Loop
8 q: q& O* Q4 y! n- J                        R = A / Ag1 / 2#
* A9 o9 H/ {- R3 k                        P = .Utility.PolarPoint(P, L.Angle + 1.5707963267949 - Ag, R). I* y+ L( V/ M! [8 P  q
                        If S2 = "A" Then; J( e% p( s7 Y8 ^5 L5 X' _
                            Space.AddArc P, R, 4.71238898038469 + L.Angle - Ag, 4.71238898038469 + L.Angle + Ag, w. C2 Q7 ?* u$ @: ]( X! S
                        Else
9 P# }% Q6 i' j1 [9 z+ m( B2 n                            Space.AddCircle P, R0 Y  ?' P$ s, ]. C1 a' v
                        End If* {& _4 M1 n. N$ ^) B
                        If S1 = "N" Or S1 = "" Then L.Delete
: x8 [3 S( Z0 i6 r. G- J                        Exit Do) b9 u, H5 }$ n' f! U+ A1 k
                    ElseIf Err.Number = -2147352567 Then9 D0 r5 B. l8 U8 M5 t
                        L.Delete( m) F  W1 e" ^. Q. E, \
                        Err.Clear
# v3 [- O) J6 ?  p) c4 G: C0 d                        Exit Do, R8 R+ t! M9 a! Y7 q0 |# l7 C% G
                    ElseIf Err.Number <> 0 Then
2 D, X0 s; I' P/ d$ N+ P                        S2 = .Utility.GetInput: G8 ]% `7 t1 E! _2 \
                    End If, O/ ]" c( h/ c( i1 ^2 u+ w# V
                Loop
  C  o; P' j* ?# h7 }7 s            ElseIf Err.Number = -2147352567 Then+ f7 A2 K: V" T0 u! f
                Exit Do$ T: Z: s' x$ O
            Else
) M. T/ C1 O: d5 l  w                S1 = .Utility.GetInput
5 x7 q" V/ _% W! B            End If
6 [5 B4 i* F5 L& d* p  M3 ]        Loop Until Err.Number = 0" T) I* G* d& h# s* s! t& @# F
    End With8 h6 F# ]% c* a
10: End Sub# a2 [& q3 d/ A+ Q' s
------------------------------------------------------------------------------------------------------------------------, f8 r& X8 Q! i6 B1 S: \
使用方法:( W5 P+ c2 `( z
1.把上面代码粘贴到VBA编辑器Thisdrawing代码窗口,或下载附件解压后加载
: c5 O6 a/ J# M& T7 q2.Alt+F8,在弹出的"宏"对话框中点运行按钮,或在命令行键入"-vbarun",回车,"H",回车
) i9 l( Z; L2 z: Y% D3.按命令行提示操作

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

7.67 KB, 下载次数: 13

评分

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

查看全部评分

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

回复 16# bbgk 的帖子

记得在初中的时候算好像还有一个条件是:那条边到直径的距离的条件的!如果非要算数算。怕是要用积分了!你要再给出一个条件的。现在条件不足!2 p2 W! a. F2 b( n, O5 A. {
7 x3 b" |0 l2 }1 ~" o  J
[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏徐州
这问题应该简单吧!
2 f) i# Z) `/ B1 }. ?6 B% D0 n0 O  E8 D: P; V
命令 :c
5 U3 h$ Y+ @: c9 p命令:3p
" v$ h- }8 ^& Z" s5 g第一点在A点* U, d; T" r( L1 |% O
第二点在B点
; f0 f+ Q" d% ]1 K命令: tan7 w8 P1 X. e2 o+ \/ R
在圆弧上任意切一点9 b( {$ u. k+ k% v
OK# F0 I/ S+ @  K' J" k7 s. h

, k7 m% C( z& @7 d7 r不知是不是楼主说的意思- e! P) G8 a0 c0 S
: s9 L4 h9 m& Z; F1 T
$ Q4 a4 |) |% f8 Y9 o: M
SANDIANYUAN.JPG ' ]' M; n& q; V2 m: W$ U$ Z
/ o' r' L* u3 ~" z4 l* X, Z1 H
[ 本帖最后由 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
9 z2 x9 ^% ^7 W& \* K' q: f这问题应该简单吧!$ g9 M  c5 f( ^' d. {( r- @

0 A& X, M% O4 ?- O. p命令 :c( I  W" ^. l0 F. L3 u
命令:3p
9 f, ~. X$ c5 Y3 X1 }- O* n) Q第一点在A点0 z4 |% Y( U. q: t
第二点在B点
9 Z; }- r1 e  b& x. l4 r命令: tan
% x5 C, L  m) ]$ K在圆弧上任意切一点! I. N# c* H& q3 ~6 |
OK
4 Q$ N& L* E% w+ R" n! i8 X, w! Z9 g, o1 u/ Q
不知是不是楼主说的意思
# R% S. s, ^. F6 C6 U
: r2 M% _' @1 F4 I7 p# I0 @6 u+ T$ @& g$ S" J3 `
995240
5 L, z, E1 l' y! L( ^- [8 m7 |0 V
咋就没想到3点画圆法呢,我真是笨死了!谢谢你!
发表于 2008-9-27 22:53:20 | 显示全部楼层 来自: 中国陕西西安

好东西好东好东西

好东西好东好东西

评分

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

查看全部评分

发表于 2008-9-28 09:25:30 | 显示全部楼层 来自: 中国上海
本要在此表示道歉...
; M6 u7 h# c. B& b2 p没有考虑清楚就说这个自己用算的...
, l$ Y4 v5 H# o7 _/ |- j0 Q9 z后来算了一下发现没那么好算.对大家带来的麻烦表示歉意.3 u+ J, r6 k2 |+ L3 B( r3 f
后来多方求教和查资料.总结一下可以按如下计算.. N; H  Z! v- b
设弦长为2a,弧长为2b,对应弧度为2x.半径为r
7 I  g  f) x- F则有:sinx=a/r,
9 P8 J# v  U, h: V1 A& F2b=2x*r
( g& w' B" m8 p9 j2 l3 H可得:sinx=x*a/b1 s, b" }$ @0 U3 R+ o  P
这个方程解法相当麻烦.
3 i2 t9 d: K* s9 ~+ G8 I3 Z最准确同时也是最麻烦的解法是使用傅立叶级数.! B& v- o1 e& t$ ?
但研究下来发现有其他的近似办法:% L  E2 c3 g2 e: N  S/ B, J: w
1. 采用画图法:画出y=sinx和y=a/b*x两条函数曲线,交点处的x值及为所得.应该有2点.一个为小半弧,为一个大半弧
- ^% `9 v3 x$ C' ~5 r2. sinx采用无穷级数展开.sinX=X-X3/3!+X5/5!-X7/7!.....考虑到精度问题这么多应该是够用了(X3表示X的3次方,这里不知道怎么标上标)% Y2 r2 p1 m2 i- |4 A2 q( v2 n

* H- M! o) `4 w; r) [5 s以上就是方程的解法...
$ I6 m* O3 v" [/ M+ s/ E和老大的给的宏那个好用大家自己看看吧.
  p: C) B9 z; l# [6 ]; X
! d6 a' H- t" C/ ^( Y1 ?% ]# u想问下xuj321123的方法是如何确定弧长的.我在使用到tan命令时点选空白的地方是没有用的.只有选一个本来有的线.这样弧长就和我所选的线位置相关,而不是一个确定的值了....

评分

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

查看全部评分

发表于 2008-9-28 10:04:32 | 显示全部楼层 来自: 中国江苏徐州
楼上的朋友,楼主说的很明白:已知“弧长”和“弦长”,有这两样你作不出图来?怎么是个空白地? :L
发表于 2008-9-28 11:09:19 | 显示全部楼层 来自: 中国云南昆明
“想问下xuj321123的方法是如何确定弧长的.我在使用到tan命令时点选空白的地方是没有用的.只有选一个本来有的线.这样弧长就和我所选的线位置相关,而不是一个确定的值了....”
9 F! [# G0 _5 s& L: A" ?7 a) j& M" K" r! Q9 ]5 X

! w) n) h4 B, q你做一条辅助线,分别交于已知的两条线,三点画圆法就可以了,TAN命令都不要用!
发表于 2008-9-28 12:20:20 | 显示全部楼层 来自: 中国山东青岛
这个二次开发好像很难的样子。。。
: `, T: |2 s4 E  b3 h
( ]9 A9 w6 M0 P$ I这个圆弧按照楼主的意思好像并不是完全已知的,只知道弧长而已,哪来的三点
发表于 2008-9-28 12:27:32 | 显示全部楼层 来自: 中国上海
原帖由 xuj321123 于 2008-9-28 10:04 发表 http://www.3dportal.cn/discuz/images/common/back.gif
- D4 g! R% y8 |1 z8 i- P3 v1 V& F楼上的朋友,楼主说的很明白:已知“弧长”和“弦长”,有这两样你作不出图来?怎么是个空白地? :L
+ A- f/ F7 }) H
& l, ?" M8 x5 e7 o
研究了一下你的画法.! j- q! P4 J  Y( v6 O
不知道顺序是不是这样的
3 w; X; i5 f0 y, h. P6 b; h4 J, q7 p9 D3 q, ~- p
先画好一个线段.长度等于弦长,再画一个弧,长度等弧长. , I+ k5 P- i  ~2 G( x7 R
再利用这2条线使用3点画圆法,画出圆来.* g" P. o$ J3 c% ~# b1 ~, m: h
, w/ ^( {) C0 T4 s
我画的时候没有先画那个弧,直接在一条线段上画圆的2个点. 没有实体可供tan ,所以画不出来,提示点无效.
$ {4 _; p6 o5 G- }
5 t* \6 J+ w' [2 j! k问题是,你事先画好的弧如何保证他的弧长是楼主所需要的弧长?
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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