QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

[已解决] 圆的画法

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

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

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

x
已知弦长与弧长,如何画圆
发表于 2008-9-24 17:08:33 | 显示全部楼层 来自: 中国云南昆明
你的弧长是大于1/2圆周还是小于(大于和小于出现两个结果的)?弦长是肯定小于直径的,等于直径你就不会问了! 你还缺一个条件:要么是对应角度,要么是周长!下图到底是哪种?如何是好?8 N6 J# ~5 n+ C4 a8 G9 e+ ]

* {& L6 F$ t; J9 V1 z- _0 D- i[ 本帖最后由 914438418 于 2008-9-24 17:12 编辑 ]
001.jpg

评分

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

查看全部评分

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

评分

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

查看全部评分

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

回复 2# 914438418 的帖子

是前面一种,请指教.
发表于 2008-9-24 21:20:47 | 显示全部楼层 来自: 中国吉林吉林市
3#的办法是可行的,不过要采用2005llnn的"精确选点法",就更容易了。1 k5 }7 D; l8 m7 q, @4 a4 c
比如:要做一个弦长为4,弧长为8的圆,可以先做一个弦长40000的直线,再拖动调整弧长为80000的弧,很容易精确到个位,然后缩小10000倍,相当于精确到小数点后4位。  ^' z8 ]0 M/ L" Y5 ~
根据所需要的精度,依此类推。9 }6 r3 ~2 w" P$ @6 b! m

' ]1 h# ?3 U0 z' x) [9 @参考贴子
+ s3 B6 Q+ H3 ^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$ H( D; [: R- O
老老实实计算出相应的半径和圆心角,画起来也是很快的,而且准确。
6 G7 q6 }$ N# \# c& m
9 {$ }' A$ o5 Y, s0 C
我也是这么弄的..........
* k( v) V6 z! X' j7 X" F看来我们都太规矩了点...: p; r& x' u* e, j7 p
不知变通啊
 楼主| 发表于 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 | 显示全部楼层 来自: 中国云南昆明
我有个方法供大家参考,只是个想法,正确性请大家指教!如图,做直线的垂直平分线,镜像后,看那个菱形,调整角度到四个角相等的时候就是圆了 !角度是可以测量的!) p1 H% S$ G) L

( A! ^) N% _: i# d4 o: S[ 本帖最后由 914438418 于 2008-9-26 11:30 编辑 ]
001.jpg
发表于 2008-9-26 13:26:01 | 显示全部楼层 来自: 中国辽宁营口
VBA代码:
5 c% R6 {4 E  o- m6 s( K( J6 w------------------------------------------------------------------------------------------------------------------------# @* I+ b' A# I7 f2 V: _
Dim S1 As String, S2 As String6 Q/ }, X  i- X% O; r6 a
Sub H()
7 {9 ^( D. C) s+ Y4 g" Z# R& c! t    Dim Space As Object, P As Variant, P2 As Variant, L As AcadLine0 e: p/ u# l& z6 I7 X% d* i
    Dim A As Double, A1 As Double, Ag As Double, Ag1 As Double, Ag2 As Double, R As Double( v% D6 e; C& P) @
    With ThisDrawing
  K( r$ k3 m. Z  u3 |, _        If .ActiveSpace = acModelSpace Then8 Y! R9 |( l' p# k% f+ ]" c' v
            Set Space = .ModelSpace
1 x4 `- g( Y, y3 p3 I; f3 j# N        Else0 p$ T/ N3 n: j. s- _$ _' d
            Set Space = .PaperSpace( W9 Z, v# ~4 \. G$ q
        End If
2 r% E) P/ f- y        On Error GoTo 10- |3 r( Y1 n! M% E% m
        P = .Utility.GetPoint(, vbCrLf & "指定弦起点:" )/ q$ n4 z: h' s5 |
        On Error Resume Next
- ?1 ^0 b; z' p5 i; C7 R5 l" |        Do
) ^# B- E* |: X2 ~            Err.Clear
; S$ Y8 c$ E6 a; E, V+ [8 S) `0 x            .Utility.InitializeUserInput 0, "Y N"# v: @# j% b+ q! a$ y# j9 W
            P2 = .Utility.GetPoint(P, vbCrLf & "指定弦端点或[保留弦(Y)/不保留弦(N)]<N>:" )
/ j4 T* N; T( Y            ( k5 G" J  I) J3 ]) M8 W0 }
            If Err.Number = 0 Then
) N2 ~  P0 g3 ~' o8 S                Set L = Space.AddLine(P, P2)
2 I& c1 z. K7 a1 O, n                Do
' ?' C1 _6 a4 n/ b                    Err.Clear
1 O9 S( j; l& {                    .Utility.InitializeUserInput 6, "A C"
. |" ], n9 X4 n- p                    A = .Utility.GetDistance(P, vbCrLf & "指定弧长或[画圆弧(A)/画圆(C)]<C>:" ); C( [/ K3 a$ X
                    If Err.Number = 0 And A > L.Length Then. l/ ~6 X. S" ~4 z1 h& f8 x9 _
                        Ag2 = 3.14159265358979
. O8 ~; H2 g0 g3 R6 P9 k( x                        Do
* D- X* v7 O& Q, p* Q                            Ag = (Ag1 + Ag2) / 2#/ v: F8 l4 q: U, h9 Z- ~/ F
                            A1 = Ag * L.Length / Sin(Ag): d* i2 p% R8 R/ ~2 I+ a
                            If A1 = A Or Ag = Ag1 Or Ag = Ag2 Then Exit Do9 c3 \! \6 p" d3 F7 C. p
                            If A1 > A Then% X3 ?0 j- q* f4 u
                                Ag2 = Ag  M' `9 w" E8 w/ Y8 l3 {0 Y
                            Else1 T5 d! J6 f$ t8 W% a9 C9 l; ^8 b
                                Ag1 = Ag
' V! D$ n1 Y- T+ o                            End If2 s1 m% y7 G) b1 I. m
                        Loop+ C# k: D+ Y4 g
                        R = A / Ag1 / 2#
) c6 G. x/ M* O6 c: \                        P = .Utility.PolarPoint(P, L.Angle + 1.5707963267949 - Ag, R)
8 ~3 C9 L6 A% x- y                        If S2 = "A" Then3 L# Y1 u: K' `" @
                            Space.AddArc P, R, 4.71238898038469 + L.Angle - Ag, 4.71238898038469 + L.Angle + Ag) D& u9 g( O6 t
                        Else  l6 n9 y; L9 a4 p% `$ z
                            Space.AddCircle P, R
9 \) Z* }6 h1 H: A                        End If; l5 G% G3 z* V' b4 y1 s9 @
                        If S1 = "N" Or S1 = "" Then L.Delete
! H* `9 b# g" v, `" ^                        Exit Do
2 S- @7 z! e$ Z9 y# }9 V) h                    ElseIf Err.Number = -2147352567 Then
" L; J. J. r1 b5 z: z  ^2 B                        L.Delete: }: {% Q2 L4 T# D& x, m( X
                        Err.Clear
3 Z4 e# F2 B# k                        Exit Do6 y, O! _% j- Z. |1 n& j
                    ElseIf Err.Number <> 0 Then
9 R3 k0 n& N2 s9 H$ T3 l0 ^                        S2 = .Utility.GetInput
) V7 V; K- Q2 j* o7 z                    End If# e. W; v3 u4 r- h0 y
                Loop
# h7 p! K5 R$ e/ ?7 z            ElseIf Err.Number = -2147352567 Then
: |  m1 y/ L- V0 ]: i                Exit Do) p2 d2 e  ~9 V6 V3 _2 o
            Else/ a1 X- |1 G6 g( B8 ?+ u7 V2 a( i
                S1 = .Utility.GetInput4 ]% Z; ~  Z5 L" Q4 g
            End If
9 R- |; _: G% {        Loop Until Err.Number = 0, c/ {- A! R" C/ H& W
    End With
$ p2 F! x' W; r% L" h: ~2 Q7 w" {10: End Sub
( P4 t% t0 t+ N7 A------------------------------------------------------------------------------------------------------------------------7 M7 S6 B1 s6 c: U. v; {; z
使用方法:
! ~# m3 H% m6 U5 f( T; O1.把上面代码粘贴到VBA编辑器Thisdrawing代码窗口,或下载附件解压后加载: |5 f( [( l+ r- G( K4 Q: \8 O
2.Alt+F8,在弹出的"宏"对话框中点运行按钮,或在命令行键入"-vbarun",回车,"H",回车3 {% ]4 _5 D! \, e' |8 U
3.按命令行提示操作

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

7.67 KB, 下载次数: 13

评分

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

查看全部评分

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

回复 16# bbgk 的帖子

记得在初中的时候算好像还有一个条件是:那条边到直径的距离的条件的!如果非要算数算。怕是要用积分了!你要再给出一个条件的。现在条件不足!
& \0 X% ~9 H. ]' H3 I1 @  e" X
. e: ]6 d. ]6 ^" ^$ P+ C[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏徐州
这问题应该简单吧!
0 N' M: M6 F/ h% a/ T" o. P2 r. \7 p# A# g1 U& F& P) Z, C
命令 :c
7 U8 F9 f) J3 f4 ^! h8 V9 {命令:3p4 |0 s( a. q( {( k
第一点在A点$ |4 i# n; t5 E% y/ i$ T; z
第二点在B点
6 t: U/ V5 x' R6 @$ E" }命令: tan
% o4 x4 B2 x0 w9 b' j在圆弧上任意切一点( s- D: \! v4 w3 J! G+ U
OK5 |9 Y& ~  D# S

- v, q' O, e# r2 e+ d9 k不知是不是楼主说的意思
/ [9 @, c) ~3 B0 T) D. S9 R' \/ i6 r) y; d8 E" C* e3 K/ h2 m, k1 q; b, ]
& K2 U$ ]0 O: s4 ^- ^! k
SANDIANYUAN.JPG
+ a4 r9 u7 @1 Y& A5 P
& i! t; y, H$ h) x' D" Q2 B) ~$ 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
& N, Y3 J$ |" f% g' w* R这问题应该简单吧!7 Y4 E  q0 r1 k
7 T% v! \! W! e  R
命令 :c
0 n. w1 z$ G/ T; t; o命令:3p
2 D0 H* Y; I! l4 i5 f) Q& ?) X第一点在A点
. d' g$ n2 N1 I2 b. s. X第二点在B点
& W6 d: F; f) E( r! L% Y$ s* [) ^命令: tan
! D- B& s" C4 o在圆弧上任意切一点' S" [6 V- s8 o. z+ ^  T# Y+ |% T
OK
1 H/ x. a: a+ \0 E6 `- E: ^, Y0 }" ~6 r
不知是不是楼主说的意思
" l2 S" |) O2 I+ X0 \/ i
1 U0 o/ B! M3 p/ o+ d: [7 S& g/ k* r* _. \' ~2 K( }; s! L3 P
995240
/ D; T% z# o& B6 p5 z) a- @/ u' x2 Z
咋就没想到3点画圆法呢,我真是笨死了!谢谢你!
发表于 2008-9-27 22:53:20 | 显示全部楼层 来自: 中国陕西西安

好东西好东好东西

好东西好东好东西

评分

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

查看全部评分

发表于 2008-9-28 09:25:30 | 显示全部楼层 来自: 中国上海
本要在此表示道歉...% l9 S/ e' l3 P  E) X
没有考虑清楚就说这个自己用算的...0 a! \$ a3 m: N8 Q9 H% d& ^  _
后来算了一下发现没那么好算.对大家带来的麻烦表示歉意.8 V7 C5 K) P0 Y0 E2 Q  x7 L
后来多方求教和查资料.总结一下可以按如下计算.
5 b3 W# D+ B; U1 ?设弦长为2a,弧长为2b,对应弧度为2x.半径为r
$ u' }4 E/ P# x' m! P则有:sinx=a/r,! C6 Z0 q! ~" o) v4 k
2b=2x*r& G$ g0 {7 G/ B' m3 }
可得:sinx=x*a/b3 {( A, Z! v3 Z# D7 P
这个方程解法相当麻烦.
7 M7 y  [4 Z- P5 Z最准确同时也是最麻烦的解法是使用傅立叶级数.
0 `: |, ?( D) m8 x3 u8 P但研究下来发现有其他的近似办法:6 P$ T( f  t6 l, B1 J
1. 采用画图法:画出y=sinx和y=a/b*x两条函数曲线,交点处的x值及为所得.应该有2点.一个为小半弧,为一个大半弧
* W3 k: `  @. T& j6 |$ t& o% X$ u2. sinx采用无穷级数展开.sinX=X-X3/3!+X5/5!-X7/7!.....考虑到精度问题这么多应该是够用了(X3表示X的3次方,这里不知道怎么标上标)7 i+ M5 x, f, _+ A1 X
8 h4 t! y& B% {8 D7 w
以上就是方程的解法...) K9 t- p9 B. }( f5 `: {6 \
和老大的给的宏那个好用大家自己看看吧.
. u8 j- N1 s: ?$ Q. k5 X3 w. \8 {( L: t4 n5 z4 m
想问下xuj321123的方法是如何确定弧长的.我在使用到tan命令时点选空白的地方是没有用的.只有选一个本来有的线.这样弧长就和我所选的线位置相关,而不是一个确定的值了....

评分

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

查看全部评分

发表于 2008-9-28 10:04:32 | 显示全部楼层 来自: 中国江苏徐州
楼上的朋友,楼主说的很明白:已知“弧长”和“弦长”,有这两样你作不出图来?怎么是个空白地? :L
发表于 2008-9-28 11:09:19 | 显示全部楼层 来自: 中国云南昆明
“想问下xuj321123的方法是如何确定弧长的.我在使用到tan命令时点选空白的地方是没有用的.只有选一个本来有的线.这样弧长就和我所选的线位置相关,而不是一个确定的值了....”, \" y" ~6 h9 l5 {3 Z1 N
9 M. ~" H9 d& ~! d: S
/ |( K: P0 [& Z2 o' |
你做一条辅助线,分别交于已知的两条线,三点画圆法就可以了,TAN命令都不要用!
发表于 2008-9-28 12:20:20 | 显示全部楼层 来自: 中国山东青岛
这个二次开发好像很难的样子。。。  N1 R6 a$ O8 C, {" Z- g/ l5 B

& P, D8 q3 x% {6 [; g7 q( W这个圆弧按照楼主的意思好像并不是完全已知的,只知道弧长而已,哪来的三点
发表于 2008-9-28 12:27:32 | 显示全部楼层 来自: 中国上海
原帖由 xuj321123 于 2008-9-28 10:04 发表 http://www.3dportal.cn/discuz/images/common/back.gif
4 {* G! Z8 I8 `! V1 N) |楼上的朋友,楼主说的很明白:已知“弧长”和“弦长”,有这两样你作不出图来?怎么是个空白地? :L

4 Y1 y' Y( f& ]: T/ c
6 w" F4 ~6 \0 [; V研究了一下你的画法.
# ]; e# D% [8 ^不知道顺序是不是这样的
2 n7 Z- ^  G0 p, O9 ^& R$ r/ o7 Q. q! i' @
先画好一个线段.长度等于弦长,再画一个弧,长度等弧长. # i: c  O& d' {1 u! c- k
再利用这2条线使用3点画圆法,画出圆来.2 r: U& |  z5 J+ l
, a& R' t" F  T+ w( }1 o& Q
我画的时候没有先画那个弧,直接在一条线段上画圆的2个点. 没有实体可供tan ,所以画不出来,提示点无效.
3 x* r+ A3 d  Y' I  Q2 {: G1 V6 r0 \6 S" `3 E) ?0 Q. A" k
问题是,你事先画好的弧如何保证他的弧长是楼主所需要的弧长?
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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