QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

[已解决] 圆的画法

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

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

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

x
已知弦长与弧长,如何画圆
发表于 2008-9-24 17:08:33 | 显示全部楼层 来自: 中国云南昆明
你的弧长是大于1/2圆周还是小于(大于和小于出现两个结果的)?弦长是肯定小于直径的,等于直径你就不会问了! 你还缺一个条件:要么是对应角度,要么是周长!下图到底是哪种?如何是好?
7 x3 b' Z( ^& v7 y# P2 n' V; h' p7 `6 E3 F; R" N0 O
[ 本帖最后由 914438418 于 2008-9-24 17:12 编辑 ]
001.jpg

评分

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

查看全部评分

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

评分

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

查看全部评分

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

回复 2# 914438418 的帖子

是前面一种,请指教.
发表于 2008-9-24 21:20:47 | 显示全部楼层 来自: 中国吉林吉林市
3#的办法是可行的,不过要采用2005llnn的"精确选点法",就更容易了。/ [) V' D! F6 b: ?1 h, y
比如:要做一个弦长为4,弧长为8的圆,可以先做一个弦长40000的直线,再拖动调整弧长为80000的弧,很容易精确到个位,然后缩小10000倍,相当于精确到小数点后4位。
8 O1 {; ?, d) }! r7 E; Q$ F根据所需要的精度,依此类推。
9 a3 u- c9 O% X) `8 s3 \ 6 ?3 U# c  g, @" L# s$ H( u/ X
参考贴子
, V' n! K+ n0 c% N. vhttp://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 W% O! c. {) c1 b: J' s' E3 q2 K
老老实实计算出相应的半径和圆心角,画起来也是很快的,而且准确。
2 D7 R% y; I; H. M
' Y: j' I6 @# M* b" l# l
我也是这么弄的..........
3 Z- g: c4 v' N  j, u' E看来我们都太规矩了点.... p7 Z  e/ K/ W' _8 e6 t4 f( j
不知变通啊
 楼主| 发表于 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 | 显示全部楼层 来自: 中国云南昆明
我有个方法供大家参考,只是个想法,正确性请大家指教!如图,做直线的垂直平分线,镜像后,看那个菱形,调整角度到四个角相等的时候就是圆了 !角度是可以测量的!3 p+ g' r' ^. s( q' w

% l6 a4 q0 i$ o9 b[ 本帖最后由 914438418 于 2008-9-26 11:30 编辑 ]
001.jpg
发表于 2008-9-26 13:26:01 | 显示全部楼层 来自: 中国辽宁营口
VBA代码:% o6 S4 f+ o* e1 R( I5 S" V
------------------------------------------------------------------------------------------------------------------------
  ]' _; n' G7 C% [: xDim S1 As String, S2 As String$ E, D" H' M% X- W+ |
Sub H()
- v" G( l2 ?* z! C5 k2 X    Dim Space As Object, P As Variant, P2 As Variant, L As AcadLine# I: k& I6 v2 K5 Q& P& Q
    Dim A As Double, A1 As Double, Ag As Double, Ag1 As Double, Ag2 As Double, R As Double+ o6 t) J& @& F: s3 n! C
    With ThisDrawing  i6 [/ M1 P0 L& K
        If .ActiveSpace = acModelSpace Then) U$ `  [  q8 Q. `
            Set Space = .ModelSpace: |/ z' Y7 H; r6 ]; V2 Q
        Else
9 M1 z) x! A+ n4 d4 B            Set Space = .PaperSpace
/ X% g! }" j% U1 t        End If
, X6 z' |/ r) _        On Error GoTo 10
6 V5 b9 \  T) A8 U9 u( e; l4 k7 `7 @        P = .Utility.GetPoint(, vbCrLf & "指定弦起点:" )
* ]% q( W8 H8 u4 [% W; a        On Error Resume Next- f& ^* [; G4 Y8 L* B5 E
        Do
8 P$ x$ S; I/ k" X8 ]* r! X" ~            Err.Clear7 y  n* t6 t. v0 n) T7 C
            .Utility.InitializeUserInput 0, "Y N"
4 D2 D! u: a1 u, M            P2 = .Utility.GetPoint(P, vbCrLf & "指定弦端点或[保留弦(Y)/不保留弦(N)]<N>:" )
- M- Z  Z' |2 T/ T1 I3 g: x            1 ?' ^# w: d+ p6 m
            If Err.Number = 0 Then! q) L8 N5 c5 t7 \6 m
                Set L = Space.AddLine(P, P2)
% Z. P2 Y$ J3 `) d0 a                Do
& H; O) J0 L# p( ]. ~4 J                    Err.Clear
5 i' q2 o: g2 Z% z$ Y: x+ W1 ?                    .Utility.InitializeUserInput 6, "A C"( F2 d% G% F6 F: t8 u
                    A = .Utility.GetDistance(P, vbCrLf & "指定弧长或[画圆弧(A)/画圆(C)]<C>:" )
( |3 [7 q9 n2 A; J                    If Err.Number = 0 And A > L.Length Then
9 X% @1 a" T! m                        Ag2 = 3.141592653589790 T7 A0 }' ~( C5 r0 \$ j" }
                        Do
9 v2 j  ], \) A& @( [                            Ag = (Ag1 + Ag2) / 2#( o! D) L  V* `- Z
                            A1 = Ag * L.Length / Sin(Ag)& i7 Y' B: u& L2 H* ?
                            If A1 = A Or Ag = Ag1 Or Ag = Ag2 Then Exit Do# j( K: P8 X) A4 q2 U
                            If A1 > A Then
8 n% n$ Y# O& q- _1 R- @                                Ag2 = Ag
# H% B* E9 k3 G( \0 G% k6 m                            Else
" y4 e+ L& O$ {7 X                                Ag1 = Ag, Y' s2 ?& n# q) k, r9 E0 j9 L
                            End If
4 ^; t' T3 h- Q, a- c( ]                        Loop. N  m2 o& J4 g) |" y, `
                        R = A / Ag1 / 2#
5 C9 a* r1 p5 W* I  |                        P = .Utility.PolarPoint(P, L.Angle + 1.5707963267949 - Ag, R)$ l5 [9 Q& w% r7 U, O
                        If S2 = "A" Then
) ?1 z. `/ a4 O2 D5 V: O  k                            Space.AddArc P, R, 4.71238898038469 + L.Angle - Ag, 4.71238898038469 + L.Angle + Ag: {5 l( C; }) J# d3 K
                        Else  E" T6 K- I5 p( R# F3 h: J
                            Space.AddCircle P, R7 ~- E' ]$ S# L2 F+ y! |9 }
                        End If
! M2 |! ^: I) D8 V2 P( k                        If S1 = "N" Or S1 = "" Then L.Delete4 E2 L) B! g9 C" I( v, L- e
                        Exit Do
% B: N( C; x& J. Q                    ElseIf Err.Number = -2147352567 Then
% c/ V9 V0 h) H                        L.Delete  K/ a; g4 d6 b2 ?
                        Err.Clear) \; `- N7 N  Q1 Y) x
                        Exit Do
9 G+ h( n% \* V  I                    ElseIf Err.Number <> 0 Then% }( l/ Y) J+ [" E# v; [* N+ g
                        S2 = .Utility.GetInput2 e  t) B! v5 U$ B
                    End If8 V3 ~( Q/ G' I7 Q
                Loop
% z! d  |! }/ _            ElseIf Err.Number = -2147352567 Then
, @+ ^; i: a! J                Exit Do) F" k+ c8 D" t) V$ g! P
            Else6 g$ {' J( v  ~+ K* `! \
                S1 = .Utility.GetInput
& z$ _2 l6 ]- Y( O1 ]            End If
& B/ T, u+ |# Z7 p1 D. W        Loop Until Err.Number = 0
5 X& L% G+ Q. \# `8 b! o9 P    End With8 O0 C! Y# L' G4 l8 u- M* _! v
10: End Sub: z  R' y6 V5 n6 T2 r8 {
------------------------------------------------------------------------------------------------------------------------
$ J$ n; J( Z( L0 k0 ]+ l使用方法:4 Q6 T) F, {# j' p7 [
1.把上面代码粘贴到VBA编辑器Thisdrawing代码窗口,或下载附件解压后加载
  x$ q0 M8 K" L! B8 l+ @2.Alt+F8,在弹出的"宏"对话框中点运行按钮,或在命令行键入"-vbarun",回车,"H",回车
6 \1 t! r6 K5 r$ o/ M, V3.按命令行提示操作

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

7.67 KB, 下载次数: 13

评分

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

查看全部评分

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

回复 16# bbgk 的帖子

记得在初中的时候算好像还有一个条件是:那条边到直径的距离的条件的!如果非要算数算。怕是要用积分了!你要再给出一个条件的。现在条件不足!
% k$ o" G! v: b; Y
) M# m* h! |- n. @' [/ m[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏徐州
这问题应该简单吧!; f) A+ i( y8 `" B9 a" Z% _  t* q
% S9 O8 l2 [1 ~9 n6 T
命令 :c$ f7 ?8 {$ l4 o9 s! z, J
命令:3p
' H+ L4 H5 p& X0 G! ~第一点在A点6 f" ?0 E1 P+ t. \" @. q, }
第二点在B点
% P2 k% a$ P6 m+ b" w命令: tan
4 r0 t: \' d; _" g8 X, k3 _在圆弧上任意切一点  l) C7 D6 h4 y' Y0 D4 |  J/ m
OK
9 x, A! `  @, ]+ w* j9 V0 P! T  k) D% j
不知是不是楼主说的意思
; }" P' ~0 `" s  Q( G5 V* R5 G5 \: j/ M) v0 C
% B, }+ ~9 x( v; M
SANDIANYUAN.JPG
, Y0 j. C  T8 q& v
6 I) b0 _# }. X6 `6 ]: m0 V4 e8 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
7 G3 M. v6 Y, Z0 M* N这问题应该简单吧!
- n$ O7 l9 @8 s; q5 C
) b) Q6 A+ N/ j& R命令 :c) f7 n) e% i3 `6 E4 p
命令:3p: u, W) O. ]5 h8 N' c: S3 A) y  T
第一点在A点! D& J* _6 \  A. I% |
第二点在B点
! d( V" h4 b& ?, N! c% }/ K% H' Y命令: tan
) K: [: [& _- p9 ?% m: E在圆弧上任意切一点* ^4 Z. ^* X/ N! R! l  Z# `
OK
3 d& |& f3 K$ a* G; N
4 |$ D# ?) N1 ~* h$ J3 t不知是不是楼主说的意思
0 ?' u  W! H6 ~% j9 ^: `8 K7 I0 m( r, Y+ {" O- S3 D- V, U
+ F5 V2 b$ Y3 F" W2 ^
995240
# k5 p0 {, E2 c3 d
咋就没想到3点画圆法呢,我真是笨死了!谢谢你!
发表于 2008-9-27 22:53:20 | 显示全部楼层 来自: 中国陕西西安

好东西好东好东西

好东西好东好东西

评分

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

查看全部评分

发表于 2008-9-28 09:25:30 | 显示全部楼层 来自: 中国上海
本要在此表示道歉...& Q5 [1 \) B4 Q/ `+ @7 h7 U
没有考虑清楚就说这个自己用算的...
8 {. I6 u) ^9 a* v后来算了一下发现没那么好算.对大家带来的麻烦表示歉意.
" o" b% g7 a7 ~6 Y% m% R, w后来多方求教和查资料.总结一下可以按如下计算.& }8 T) W, I$ A# S" ]; O& w
设弦长为2a,弧长为2b,对应弧度为2x.半径为r
0 v4 I& X2 z* z2 T: v* i) x则有:sinx=a/r,3 d$ h/ T6 I1 O8 p; E3 e' R
2b=2x*r
( n: {: w/ u  ~( C6 j. l* r3 z1 P可得:sinx=x*a/b
6 e5 {# y" w; H: n* ~+ C. o% ~这个方程解法相当麻烦.
$ I1 A" g$ C* x最准确同时也是最麻烦的解法是使用傅立叶级数.
! S, ]2 V, \. v# u& B" u7 j* N但研究下来发现有其他的近似办法:  \% z' r( @' S" l( d
1. 采用画图法:画出y=sinx和y=a/b*x两条函数曲线,交点处的x值及为所得.应该有2点.一个为小半弧,为一个大半弧
1 D6 A/ H" r2 G  d8 A) ~. z! l2. sinx采用无穷级数展开.sinX=X-X3/3!+X5/5!-X7/7!.....考虑到精度问题这么多应该是够用了(X3表示X的3次方,这里不知道怎么标上标)/ c( [/ X. N, G1 Y
5 n9 ^) J  ?: d, A7 k# \! ]
以上就是方程的解法...
/ E; [/ `/ G8 F3 p* r和老大的给的宏那个好用大家自己看看吧.. R0 P0 G: ?% @2 ^8 ]2 p
+ X* u2 Q4 W- s
想问下xuj321123的方法是如何确定弧长的.我在使用到tan命令时点选空白的地方是没有用的.只有选一个本来有的线.这样弧长就和我所选的线位置相关,而不是一个确定的值了....

评分

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

查看全部评分

发表于 2008-9-28 10:04:32 | 显示全部楼层 来自: 中国江苏徐州
楼上的朋友,楼主说的很明白:已知“弧长”和“弦长”,有这两样你作不出图来?怎么是个空白地? :L
发表于 2008-9-28 11:09:19 | 显示全部楼层 来自: 中国云南昆明
“想问下xuj321123的方法是如何确定弧长的.我在使用到tan命令时点选空白的地方是没有用的.只有选一个本来有的线.这样弧长就和我所选的线位置相关,而不是一个确定的值了....”, A/ W$ u: j. m% K; j5 j
6 `4 u# X+ b2 m! r2 S. C3 ?! N

0 F- [3 D* q$ O5 P你做一条辅助线,分别交于已知的两条线,三点画圆法就可以了,TAN命令都不要用!
发表于 2008-9-28 12:20:20 | 显示全部楼层 来自: 中国山东青岛
这个二次开发好像很难的样子。。。
, k8 n  j) x( L1 s2 l6 Q8 d1 p! b* Y" c! d7 j5 L5 m7 j
这个圆弧按照楼主的意思好像并不是完全已知的,只知道弧长而已,哪来的三点
发表于 2008-9-28 12:27:32 | 显示全部楼层 来自: 中国上海
原帖由 xuj321123 于 2008-9-28 10:04 发表 http://www.3dportal.cn/discuz/images/common/back.gif0 O8 A# C* z( G
楼上的朋友,楼主说的很明白:已知“弧长”和“弦长”,有这两样你作不出图来?怎么是个空白地? :L

: d+ I: Z$ S" N) y* X" J% i6 E3 i. S( B
研究了一下你的画法." }, r% l$ J& V# `% B
不知道顺序是不是这样的0 }0 [1 m9 `' x+ V5 I4 y: ?; R

6 S& D2 ^- Y: \# T# @0 A0 h先画好一个线段.长度等于弦长,再画一个弧,长度等弧长. 7 a+ i. M( E# y( l
再利用这2条线使用3点画圆法,画出圆来.4 Z! `1 C+ K! U/ e
* r0 G9 n3 @5 P2 E9 h8 ?/ l3 O
我画的时候没有先画那个弧,直接在一条线段上画圆的2个点. 没有实体可供tan ,所以画不出来,提示点无效.( L4 p% a2 z  q5 w# `/ m
7 ~( I/ `2 Y) L0 t6 M/ U
问题是,你事先画好的弧如何保证他的弧长是楼主所需要的弧长?
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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