QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

[已解决] 圆的画法

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

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

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

x
已知弦长与弧长,如何画圆
发表于 2008-9-24 17:08:33 | 显示全部楼层 来自: 中国云南昆明
你的弧长是大于1/2圆周还是小于(大于和小于出现两个结果的)?弦长是肯定小于直径的,等于直径你就不会问了! 你还缺一个条件:要么是对应角度,要么是周长!下图到底是哪种?如何是好?- @6 v) K$ i" k% n; i- ], S: Z
- g- r3 W, K4 |; ?- e( J3 E* g
[ 本帖最后由 914438418 于 2008-9-24 17:12 编辑 ]
001.jpg

评分

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

查看全部评分

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

评分

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

查看全部评分

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

回复 2# 914438418 的帖子

是前面一种,请指教.
发表于 2008-9-24 21:20:47 | 显示全部楼层 来自: 中国吉林吉林市
3#的办法是可行的,不过要采用2005llnn的"精确选点法",就更容易了。: |  G: B' C9 k! r1 n4 R) Q# w
比如:要做一个弦长为4,弧长为8的圆,可以先做一个弦长40000的直线,再拖动调整弧长为80000的弧,很容易精确到个位,然后缩小10000倍,相当于精确到小数点后4位。$ E% \5 t0 \. q3 T0 e( \- [
根据所需要的精度,依此类推。- D# C+ j) m6 {
8 h' L) R% }! q
参考贴子2 Z2 f, [" L* s1 X; 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.gif4 [" \* o) b: |8 v
老老实实计算出相应的半径和圆心角,画起来也是很快的,而且准确。

" {" M0 K3 Q, X; [$ m7 o& ^5 _$ e, ~
我也是这么弄的..........( }1 z4 E( s* ^
看来我们都太规矩了点...
2 t* O) J7 r4 h" B+ W/ C0 c: [不知变通啊
 楼主| 发表于 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 | 显示全部楼层 来自: 中国云南昆明
我有个方法供大家参考,只是个想法,正确性请大家指教!如图,做直线的垂直平分线,镜像后,看那个菱形,调整角度到四个角相等的时候就是圆了 !角度是可以测量的!
- {$ W5 [$ q# s5 @/ {# t8 C" [% Q# ]' [6 }- X3 v
[ 本帖最后由 914438418 于 2008-9-26 11:30 编辑 ]
001.jpg
发表于 2008-9-26 13:26:01 | 显示全部楼层 来自: 中国辽宁营口
VBA代码:/ j/ i0 v" \9 t' X5 u
------------------------------------------------------------------------------------------------------------------------
& A: [. ]7 C+ Y4 k0 VDim S1 As String, S2 As String7 o  k( S$ t* r
Sub H()
7 r5 z7 h5 i- c. u6 m4 K% P    Dim Space As Object, P As Variant, P2 As Variant, L As AcadLine
8 A/ e2 ?. T6 h3 K' C1 z2 Y: l    Dim A As Double, A1 As Double, Ag As Double, Ag1 As Double, Ag2 As Double, R As Double
( c( z) g; W+ f* R, ?3 k6 U' `    With ThisDrawing
8 v1 E. {9 {7 K* Z% [% B        If .ActiveSpace = acModelSpace Then4 r7 O7 k1 D% A3 ?0 j3 H+ m
            Set Space = .ModelSpace
9 _1 w. ^" p! P        Else
2 Z9 t( ]; A0 B  e            Set Space = .PaperSpace
; y9 v: ?. a7 |7 M        End If
# P( B+ J( J0 O  R- r! C8 M        On Error GoTo 10
& C2 o6 q+ h& W0 [        P = .Utility.GetPoint(, vbCrLf & "指定弦起点:" )
: K3 D& [9 D/ Q/ W$ k        On Error Resume Next$ D! S' B) \) B0 P6 v
        Do
- P6 d4 a0 X" l            Err.Clear
  X! G: E" ?/ Y; q7 x# ?            .Utility.InitializeUserInput 0, "Y N"9 j6 Y& W% ]! L+ a0 c
            P2 = .Utility.GetPoint(P, vbCrLf & "指定弦端点或[保留弦(Y)/不保留弦(N)]<N>:" )
" {# a$ z" ]3 g  O8 }8 Z            
. m& o: J9 a* Z7 m4 R/ a            If Err.Number = 0 Then8 }# z/ ~: z) }: M
                Set L = Space.AddLine(P, P2)
) C/ b( I3 F. P                Do. p4 D7 \3 U3 ~/ X* v4 y, ~
                    Err.Clear
& Y# b/ W/ \# @, c                    .Utility.InitializeUserInput 6, "A C"- x7 R1 X9 K3 r: V! T5 \3 _( G6 R
                    A = .Utility.GetDistance(P, vbCrLf & "指定弧长或[画圆弧(A)/画圆(C)]<C>:" )
) @8 E" g% `& s                    If Err.Number = 0 And A > L.Length Then, j/ W; ~" [" @8 _9 u- z5 X
                        Ag2 = 3.14159265358979
8 ~9 f$ _9 f# h, I                        Do
% v! \( \& l; w2 I# l. Y) ?                            Ag = (Ag1 + Ag2) / 2#+ T- A' y* C6 G/ _% ?
                            A1 = Ag * L.Length / Sin(Ag), a/ B/ Q1 ^" v6 j) u# d* ]
                            If A1 = A Or Ag = Ag1 Or Ag = Ag2 Then Exit Do
9 o) S6 I7 M: R, B5 D7 I" L8 o                            If A1 > A Then7 T! t6 h( f' I2 R8 t
                                Ag2 = Ag
7 E! v2 D' C  W2 x1 U  \2 i                            Else  R4 T3 j3 ~* P: B* e. F! g( m! S- I3 H
                                Ag1 = Ag
; _. V  C4 e% R8 m                            End If
! y, Z) G8 S3 ]                        Loop% g& H0 L. [3 y. _6 {; [
                        R = A / Ag1 / 2#8 H' U' n  b! q& |/ O
                        P = .Utility.PolarPoint(P, L.Angle + 1.5707963267949 - Ag, R)
6 n4 Y* q* t( X  f% \                        If S2 = "A" Then
8 w3 `$ F1 {4 a; m. p5 ^# D) v                            Space.AddArc P, R, 4.71238898038469 + L.Angle - Ag, 4.71238898038469 + L.Angle + Ag
2 r2 C2 _2 m! K  Y- ^! w                        Else
% G) h2 A* N5 U6 t7 f  X4 Y, Y6 [: j                            Space.AddCircle P, R3 C( E: i3 J2 m
                        End If8 o* N4 I* _  Y- v. I
                        If S1 = "N" Or S1 = "" Then L.Delete5 E+ B5 w+ L: b' w; c6 O4 Y
                        Exit Do4 g0 {- e  T( p) x4 U+ K
                    ElseIf Err.Number = -2147352567 Then* L5 C. v6 C" R6 z' o
                        L.Delete
  E# F& A9 @+ g, s                        Err.Clear* J: {0 U0 t+ u/ f
                        Exit Do6 s2 R" N6 K- U
                    ElseIf Err.Number <> 0 Then( {% q0 i; C1 c$ y0 c; D
                        S2 = .Utility.GetInput5 a0 k  j- r* T& ^( a% @
                    End If
1 U1 n% o+ k5 C* S  ~                Loop" {1 ^% h5 g& v; C" z
            ElseIf Err.Number = -2147352567 Then, J  {$ e2 g* i
                Exit Do9 }9 j, R# J8 Y$ L
            Else& S( {& ^8 G& Q( [. A3 H" x
                S1 = .Utility.GetInput3 V$ {, S' R  p( q6 H3 j4 Y" i
            End If
- o* X. _* E! [$ a5 b  G; x        Loop Until Err.Number = 0
' }: e0 \# C+ N( a. \    End With
* ^5 ~3 f3 o0 w0 d) R10: End Sub0 ?# Z; D7 k( }! N" x" {
------------------------------------------------------------------------------------------------------------------------
  J5 V# E' _4 ~8 A2 I9 d使用方法:
* V/ Z: N) t# _  Z$ q3 T- ]& q* L1.把上面代码粘贴到VBA编辑器Thisdrawing代码窗口,或下载附件解压后加载. r6 F, Y  J- o  D
2.Alt+F8,在弹出的"宏"对话框中点运行按钮,或在命令行键入"-vbarun",回车,"H",回车4 ~3 o" X* K1 m9 s& b  Z
3.按命令行提示操作

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

7.67 KB, 下载次数: 13

评分

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

查看全部评分

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

回复 16# bbgk 的帖子

记得在初中的时候算好像还有一个条件是:那条边到直径的距离的条件的!如果非要算数算。怕是要用积分了!你要再给出一个条件的。现在条件不足!/ X9 w* y" v2 V2 t2 d8 F: u; `

& x7 ?' |) T/ }. G4 G[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏徐州
这问题应该简单吧!
" d8 a1 L6 C) A# L. t- J+ E$ V! j+ |7 g0 ]
命令 :c5 O& X) M2 {2 t% c# P6 H
命令:3p! c( G1 e: g* a) [8 N
第一点在A点
3 z; ^' M4 f: M& q* ~& t; P第二点在B点
+ B" M$ Z( [: e. q命令: tan
9 ?* z, ^1 w- s* I" e( B) f( `在圆弧上任意切一点
% B/ i. u$ l7 c8 Y; t- U9 iOK
# }- L7 y* z3 t1 @8 f, b# ~
- W% T# K6 T" ?/ u6 \  E' m  x不知是不是楼主说的意思8 @( P4 _5 i& m$ }0 l2 s2 t" r5 B
5 n# ^6 _4 m2 P6 g. `6 n
( {" S1 R7 c& \8 d0 F# V; Q# b4 s
SANDIANYUAN.JPG % i/ C0 x! F1 {# f  x6 x
! B1 i  A9 D2 |/ T9 Y
[ 本帖最后由 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( X4 a) N. I+ x2 i
这问题应该简单吧!
# G* x4 N( q( g  Z7 n
' \- F, l% X( g1 m4 F$ U+ H( }& L1 N命令 :c; f/ n& x8 E' ^+ h. g) i' O
命令:3p
4 }" w. \+ d: d, R' o7 e9 j" C第一点在A点  H# U" V5 h# C9 c
第二点在B点
2 ?( V" i9 i' a  A3 {6 g命令: tan
' T# H# ]" Z" u$ c, H在圆弧上任意切一点
$ I' S/ d$ @. R$ ^OK' I! ?0 W3 L% v: \; X

/ B- ]* `( j2 ~  U不知是不是楼主说的意思3 X. t7 Y' n2 \9 A9 B0 v
, w% l8 \" B. }- D

3 L. A% H  H$ a7 l' }8 C995240
" V) N2 n* [- i
咋就没想到3点画圆法呢,我真是笨死了!谢谢你!
发表于 2008-9-27 22:53:20 | 显示全部楼层 来自: 中国陕西西安

好东西好东好东西

好东西好东好东西

评分

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

查看全部评分

发表于 2008-9-28 09:25:30 | 显示全部楼层 来自: 中国上海
本要在此表示道歉...
" E, d# p' d  U" l0 K9 d# v9 E没有考虑清楚就说这个自己用算的...1 W( ~" I/ `2 C) l1 ~: p8 U8 {( q
后来算了一下发现没那么好算.对大家带来的麻烦表示歉意.
2 d- ~+ R' Z0 w  X2 J9 a) e5 a后来多方求教和查资料.总结一下可以按如下计算.
: _% F7 U/ u: k3 p6 f5 S5 I设弦长为2a,弧长为2b,对应弧度为2x.半径为r% @, Z6 ~% \" p( o" e
则有:sinx=a/r,
  Z% ?/ L+ @# _2b=2x*r
% |% e: N1 F; Y7 n6 F' g可得:sinx=x*a/b
7 r+ n' N1 u1 l1 c: q9 j这个方程解法相当麻烦.+ X) J4 A3 O0 u
最准确同时也是最麻烦的解法是使用傅立叶级数.5 j* X; N, C9 l' X+ b
但研究下来发现有其他的近似办法:$ l: o7 {2 F3 _  ^: X; |! ~: g* f$ E4 L
1. 采用画图法:画出y=sinx和y=a/b*x两条函数曲线,交点处的x值及为所得.应该有2点.一个为小半弧,为一个大半弧0 a0 Y/ I9 {4 ], r
2. sinx采用无穷级数展开.sinX=X-X3/3!+X5/5!-X7/7!.....考虑到精度问题这么多应该是够用了(X3表示X的3次方,这里不知道怎么标上标)
1 j, r' x: z4 h# ?
( O- R7 i+ z# G! v3 y1 b以上就是方程的解法.... }6 L$ ?4 q3 v+ P7 r& f
和老大的给的宏那个好用大家自己看看吧.
- x2 |# S1 |9 T$ B  F/ s
2 L$ l& U8 |: c想问下xuj321123的方法是如何确定弧长的.我在使用到tan命令时点选空白的地方是没有用的.只有选一个本来有的线.这样弧长就和我所选的线位置相关,而不是一个确定的值了....

评分

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

查看全部评分

发表于 2008-9-28 10:04:32 | 显示全部楼层 来自: 中国江苏徐州
楼上的朋友,楼主说的很明白:已知“弧长”和“弦长”,有这两样你作不出图来?怎么是个空白地? :L
发表于 2008-9-28 11:09:19 | 显示全部楼层 来自: 中国云南昆明
“想问下xuj321123的方法是如何确定弧长的.我在使用到tan命令时点选空白的地方是没有用的.只有选一个本来有的线.这样弧长就和我所选的线位置相关,而不是一个确定的值了....”
- F/ y0 e% l& U, B  }; i3 ~% C* M% A8 S9 `; A. Z

" X; t5 d/ s$ t* j你做一条辅助线,分别交于已知的两条线,三点画圆法就可以了,TAN命令都不要用!
发表于 2008-9-28 12:20:20 | 显示全部楼层 来自: 中国山东青岛
这个二次开发好像很难的样子。。。2 f* G3 X' N' T$ h4 K( i' ^+ _

6 t" Y) N# Z! A( }这个圆弧按照楼主的意思好像并不是完全已知的,只知道弧长而已,哪来的三点
发表于 2008-9-28 12:27:32 | 显示全部楼层 来自: 中国上海
原帖由 xuj321123 于 2008-9-28 10:04 发表 http://www.3dportal.cn/discuz/images/common/back.gif
; }2 ]: l7 l' U0 @' m楼上的朋友,楼主说的很明白:已知“弧长”和“弦长”,有这两样你作不出图来?怎么是个空白地? :L

$ S/ k7 Y3 S' x3 E3 K3 i" k
8 b2 v0 a7 [9 K: ~& d研究了一下你的画法.
8 s0 E6 r% L% P: `! T不知道顺序是不是这样的# ]6 p1 @! X( v; r3 W& W1 n& p
$ Z' d+ r4 A2 z. P3 E  s- v1 g
先画好一个线段.长度等于弦长,再画一个弧,长度等弧长. 2 [7 a* A/ U0 R" Q# e. @
再利用这2条线使用3点画圆法,画出圆来.
1 J- M5 ?/ y7 t3 L3 b. a- Z- a# \6 J
我画的时候没有先画那个弧,直接在一条线段上画圆的2个点. 没有实体可供tan ,所以画不出来,提示点无效.
; ^" N6 ?3 D4 k9 f) U% ~9 p3 f2 H( k" h' X' d  \; `
问题是,你事先画好的弧如何保证他的弧长是楼主所需要的弧长?
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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