QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

[已解决] 圆的画法

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

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

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

x
已知弦长与弧长,如何画圆
发表于 2008-9-24 17:08:33 | 显示全部楼层 来自: 中国云南昆明
你的弧长是大于1/2圆周还是小于(大于和小于出现两个结果的)?弦长是肯定小于直径的,等于直径你就不会问了! 你还缺一个条件:要么是对应角度,要么是周长!下图到底是哪种?如何是好?
* F$ n1 C% \4 y2 E0 B9 _0 S/ ?+ ^% @6 s7 H
[ 本帖最后由 914438418 于 2008-9-24 17:12 编辑 ]
001.jpg

评分

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

查看全部评分

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

评分

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

查看全部评分

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

回复 2# 914438418 的帖子

是前面一种,请指教.
发表于 2008-9-24 21:20:47 | 显示全部楼层 来自: 中国吉林吉林市
3#的办法是可行的,不过要采用2005llnn的"精确选点法",就更容易了。
$ Y! v- W3 Y. Y3 S" O* j比如:要做一个弦长为4,弧长为8的圆,可以先做一个弦长40000的直线,再拖动调整弧长为80000的弧,很容易精确到个位,然后缩小10000倍,相当于精确到小数点后4位。
( P5 X* J& R! g2 m% F% n根据所需要的精度,依此类推。/ A! w! C" g- J+ A
8 H# B% I# N6 x* A9 k
参考贴子1 Q3 H9 R) y( x$ Z( W
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.gif
( _! X8 Y  A* a8 V老老实实计算出相应的半径和圆心角,画起来也是很快的,而且准确。

& d, C! q) z, S, f( I8 @' K  r/ z5 J& f2 g8 Q
我也是这么弄的..........
1 R+ Z0 G  c( s* {; o/ k; C8 {看来我们都太规矩了点...+ ]: Z& C" H. G# `' t- p$ F. |
不知变通啊
 楼主| 发表于 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 | 显示全部楼层 来自: 中国云南昆明
我有个方法供大家参考,只是个想法,正确性请大家指教!如图,做直线的垂直平分线,镜像后,看那个菱形,调整角度到四个角相等的时候就是圆了 !角度是可以测量的!- H4 W  x7 N5 j5 V7 p7 p: O7 |9 J2 d
% E3 Q+ @* j9 x; ~& z
[ 本帖最后由 914438418 于 2008-9-26 11:30 编辑 ]
001.jpg
发表于 2008-9-26 13:26:01 | 显示全部楼层 来自: 中国辽宁营口
VBA代码:. S  |9 N7 o/ r3 r0 s* U
------------------------------------------------------------------------------------------------------------------------
6 b2 }8 {: ^: L* m" V! d8 ]Dim S1 As String, S2 As String
& m; S% |% e1 q3 a: JSub H()
: l& j, P% T$ a* T9 e; r  ?    Dim Space As Object, P As Variant, P2 As Variant, L As AcadLine' P9 M! H6 V6 {2 r
    Dim A As Double, A1 As Double, Ag As Double, Ag1 As Double, Ag2 As Double, R As Double
, r- G" s2 N# N4 c* A    With ThisDrawing( K) ?3 z; p# N1 {8 r( a
        If .ActiveSpace = acModelSpace Then- r# M. [" x: {0 p
            Set Space = .ModelSpace
9 f4 e6 ~8 R" {$ a        Else& i# H. t  j8 \% S1 }4 A5 S
            Set Space = .PaperSpace/ G/ Y4 s4 |5 s* T( K' h
        End If: j4 r& X* _) a+ i' M: S( X
        On Error GoTo 10
1 R. E0 |% r% [6 O1 A; n        P = .Utility.GetPoint(, vbCrLf & "指定弦起点:" )# E9 r  h% L% c- I9 @+ T# k
        On Error Resume Next
3 a! o2 s/ E9 I! g( B0 A        Do$ a* E& k6 o0 t3 w, U* h
            Err.Clear. V  b" s+ ^( a4 J
            .Utility.InitializeUserInput 0, "Y N"
! q' W# h: {$ q            P2 = .Utility.GetPoint(P, vbCrLf & "指定弦端点或[保留弦(Y)/不保留弦(N)]<N>:" )
& Y" _8 |0 {. }2 T- `3 a' ?            
# P7 _6 {6 ~0 r$ Q: f            If Err.Number = 0 Then
# H4 y9 e' J$ O4 H                Set L = Space.AddLine(P, P2)
$ v" J! y& T1 l( M0 Z: `2 A                Do5 r, k, u- `! w  y
                    Err.Clear
. a9 I4 l2 C8 Q                    .Utility.InitializeUserInput 6, "A C"# N$ r, @& k  x+ t& t7 u# [
                    A = .Utility.GetDistance(P, vbCrLf & "指定弧长或[画圆弧(A)/画圆(C)]<C>:" )
) e& p( w" u( b- G                    If Err.Number = 0 And A > L.Length Then
" u5 b9 C; F/ H+ i+ R. p0 \                        Ag2 = 3.141592653589799 \5 r5 f) |& X
                        Do. g  l2 ?! W- g' `' ~9 C
                            Ag = (Ag1 + Ag2) / 2#" W/ w" R8 \! w1 u- X% ?; P7 R& V, ?: T
                            A1 = Ag * L.Length / Sin(Ag); [0 v3 r; N, j4 ?, e0 w
                            If A1 = A Or Ag = Ag1 Or Ag = Ag2 Then Exit Do3 Z6 Q5 V# q2 G! I
                            If A1 > A Then
) }; {. `# o+ w3 z4 f2 e                                Ag2 = Ag+ a! k" S0 ~2 |% O/ {
                            Else
0 [/ E% E9 h9 U$ H, P% P( K8 C                                Ag1 = Ag" H7 t4 Z! I: c- ^. `
                            End If% I. A$ {/ W) @8 O: [
                        Loop
: N# y3 f" I2 ?1 w                        R = A / Ag1 / 2#
% y6 d7 u4 a; i/ }( U& b                        P = .Utility.PolarPoint(P, L.Angle + 1.5707963267949 - Ag, R), U0 c! n! t! w' `
                        If S2 = "A" Then
& {# f2 Y; \. X2 p9 ?                            Space.AddArc P, R, 4.71238898038469 + L.Angle - Ag, 4.71238898038469 + L.Angle + Ag
. p% i' Y$ M5 U* M$ H* K                        Else3 {/ }. r* s& ]  p) }- P! F/ g
                            Space.AddCircle P, R, e& P9 H& p0 Y: P' r
                        End If9 r0 d( I* E: l8 D1 v
                        If S1 = "N" Or S1 = "" Then L.Delete
- |6 S3 n. y" w4 [( G                        Exit Do
  @. o6 e2 v+ [$ T3 ?4 s; f* q/ K                    ElseIf Err.Number = -2147352567 Then
5 }3 g  j  W" E  A                        L.Delete1 F+ l, {9 z, s) O" Y, |- x& i
                        Err.Clear& M9 t9 _8 [' C. S
                        Exit Do
8 P# q' Z9 N. A5 q                    ElseIf Err.Number <> 0 Then
" D# B9 N# C1 H4 e- T& ~1 D' t/ `                        S2 = .Utility.GetInput
3 E& o+ J& A) |1 q# a, h2 r                    End If/ y& {" \* H# V! _& ?
                Loop) W5 H3 I7 l8 \/ }; [
            ElseIf Err.Number = -2147352567 Then6 t! O& O' Z* q  s" m
                Exit Do
. G, ^" u! [) U0 Y+ a) M            Else
" [: S  ?. _2 H' c  j                S1 = .Utility.GetInput
, E: \3 L9 {/ E0 ?; _            End If2 m5 D+ ~' _7 ]# v3 s
        Loop Until Err.Number = 0& i6 U2 S% q/ V. C# h/ I  w
    End With
/ \* r. Z* X- Q10: End Sub
8 }1 K+ H# D) n( e. U; T' T------------------------------------------------------------------------------------------------------------------------
, t0 a2 \* n  E+ R! Q使用方法:5 z, B! r2 t. K4 _5 M1 ]
1.把上面代码粘贴到VBA编辑器Thisdrawing代码窗口,或下载附件解压后加载
& m3 g+ f' \8 b% p2.Alt+F8,在弹出的"宏"对话框中点运行按钮,或在命令行键入"-vbarun",回车,"H",回车/ E2 X4 S: U3 `
3.按命令行提示操作

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

7.67 KB, 下载次数: 13

评分

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

查看全部评分

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

回复 16# bbgk 的帖子

记得在初中的时候算好像还有一个条件是:那条边到直径的距离的条件的!如果非要算数算。怕是要用积分了!你要再给出一个条件的。现在条件不足!
& A& O' A( `+ p# d/ t5 S% j; G/ p
[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏徐州
这问题应该简单吧!: q$ H8 Z+ @# k! f6 ]

! n: `* q. N6 a0 |7 d5 S命令 :c$ O6 P% q9 p3 [- R
命令:3p& z4 @& g: X) D9 n
第一点在A点8 s. f# w7 f* P; V' C
第二点在B点  g# S% ^% S4 N# H! p7 |* d* ?: Z# Z
命令: tan
4 k3 Y  i- g, N; J. _在圆弧上任意切一点  \( v4 F; \2 ^  Q4 m4 C, C
OK- ?$ ]. y* F( T+ Z" W
" ^. L6 s" v. U1 o/ C3 R
不知是不是楼主说的意思+ W7 l5 _( s; C

5 K* A7 t$ }" T7 y  W* `  x
7 T& [  g; d* G+ W+ ]% J- T6 {0 _ SANDIANYUAN.JPG
! g" T' [1 x% V' K7 u
8 V- {( F# j; B- D8 D+ ]4 l[ 本帖最后由 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
: `. ~4 f  X& T$ k& Q这问题应该简单吧!0 q% t3 i% s9 w. O
: z! x4 Z0 `, K6 c; I
命令 :c& y9 s' [% d# Q# W% J: C3 M, A
命令:3p" \# c* b/ v! i5 O, {
第一点在A点; k6 b7 `9 M. z  g9 G& H
第二点在B点6 x3 n2 X, \$ h/ j. t+ i5 T
命令: tan
0 A$ _" T" d3 v6 n, V; b在圆弧上任意切一点
8 c4 v1 y, o  ]& N( hOK+ j5 g) Q$ d8 S
8 ]) v% o5 }% E
不知是不是楼主说的意思# |: A3 ]1 v$ o7 Z4 e

7 R' l# Q' Y9 D* T$ d4 G$ Z7 Y% M: Z5 C7 ?  m7 C  e
995240

  I" D* Y2 L8 h6 D咋就没想到3点画圆法呢,我真是笨死了!谢谢你!
发表于 2008-9-27 22:53:20 | 显示全部楼层 来自: 中国陕西西安

好东西好东好东西

好东西好东好东西

评分

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

查看全部评分

发表于 2008-9-28 09:25:30 | 显示全部楼层 来自: 中国上海
本要在此表示道歉.../ h  P9 [7 g% A8 q* F
没有考虑清楚就说这个自己用算的...7 N; l7 a( a- H4 `+ N
后来算了一下发现没那么好算.对大家带来的麻烦表示歉意.
- G* V. _+ H+ M' H- {' M  S( S后来多方求教和查资料.总结一下可以按如下计算.
/ t+ U( Z3 ~% y" _设弦长为2a,弧长为2b,对应弧度为2x.半径为r# F5 l* p: ?% R. f9 \/ ^
则有:sinx=a/r,! n6 {; G& W! g0 K# c& ~
2b=2x*r. P  z8 O" i. ^7 H5 P" j9 ~: L/ u
可得:sinx=x*a/b) C/ o2 n; c  M; w, q: G
这个方程解法相当麻烦.
, f7 H8 u$ z3 T) g: ]. i最准确同时也是最麻烦的解法是使用傅立叶级数.. I* ~: O" J  @# H: K! e' T" F
但研究下来发现有其他的近似办法:5 }2 P6 ^1 ?- S! H
1. 采用画图法:画出y=sinx和y=a/b*x两条函数曲线,交点处的x值及为所得.应该有2点.一个为小半弧,为一个大半弧
/ \# X1 q% W# p/ w, H2. sinx采用无穷级数展开.sinX=X-X3/3!+X5/5!-X7/7!.....考虑到精度问题这么多应该是够用了(X3表示X的3次方,这里不知道怎么标上标)
3 \6 a# h0 [  `: H5 V
8 [1 z* U& b- r' k& X以上就是方程的解法...& `+ }# i9 m* U# J& l+ f
和老大的给的宏那个好用大家自己看看吧.5 r! @1 Y1 P0 G& r( S2 C) Z& V0 Z
2 m- {2 N8 L5 }* ~7 J1 K
想问下xuj321123的方法是如何确定弧长的.我在使用到tan命令时点选空白的地方是没有用的.只有选一个本来有的线.这样弧长就和我所选的线位置相关,而不是一个确定的值了....

评分

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

查看全部评分

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

- B! U; ?  A" s) K) S! l' A你做一条辅助线,分别交于已知的两条线,三点画圆法就可以了,TAN命令都不要用!
发表于 2008-9-28 12:20:20 | 显示全部楼层 来自: 中国山东青岛
这个二次开发好像很难的样子。。。
* h; M) V) m0 I. F( b& B8 ~% ~2 h- s3 ^% z. \
这个圆弧按照楼主的意思好像并不是完全已知的,只知道弧长而已,哪来的三点
发表于 2008-9-28 12:27:32 | 显示全部楼层 来自: 中国上海
原帖由 xuj321123 于 2008-9-28 10:04 发表 http://www.3dportal.cn/discuz/images/common/back.gif
8 q- W1 \' I" T7 r  r* s6 \楼上的朋友,楼主说的很明白:已知“弧长”和“弦长”,有这两样你作不出图来?怎么是个空白地? :L

" r6 g4 k3 m$ D1 r, }7 ?% [3 n1 U( q
研究了一下你的画法.
+ n; J) r6 p+ L1 Q  u不知道顺序是不是这样的
! u  S- q( r- j8 \) ^) M
/ z& S" W% {9 C; P: X& r! A先画好一个线段.长度等于弦长,再画一个弧,长度等弧长. ) n- x1 C! I2 Q0 Q7 }
再利用这2条线使用3点画圆法,画出圆来.
  [" N( b( d6 j8 P  M4 _8 Y. i$ T2 P+ [, ?
我画的时候没有先画那个弧,直接在一条线段上画圆的2个点. 没有实体可供tan ,所以画不出来,提示点无效.% H5 q: X9 j( r- [3 }
$ b, n1 [6 e2 d. L4 Z+ A7 {
问题是,你事先画好的弧如何保证他的弧长是楼主所需要的弧长?
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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