QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

[已解决] 圆的画法

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

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

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

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

评分

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

查看全部评分

发表于 2008-9-24 17:43:26 | 显示全部楼层 来自: 中国浙江温州
按实际来说,你说的条件本来可以确定一个圆了,但是AUTOCAD好象没有相关的命令,所以很难直接做出来,3 b7 S9 W- u7 K' s3 G
        有一个很笨的法子,画出已知直线,以直线两端随便画一个弧,选中这个弧,在工具-查询-列表显示中可以看到它的弧长,根据与已知弧长的差别进行拉动,反复查询,对比,拉动,最后得到想要的弧,就可以求出圆了.
* f. j1 W2 M5 `4 v4 e    想看到比这个办法更高明的办法,期待中.

评分

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

查看全部评分

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

回复 2# 914438418 的帖子

是前面一种,请指教.
发表于 2008-9-24 21:20:47 | 显示全部楼层 来自: 中国吉林吉林市
3#的办法是可行的,不过要采用2005llnn的"精确选点法",就更容易了。) B/ R# b& h6 C* J" b+ z  Z
比如:要做一个弦长为4,弧长为8的圆,可以先做一个弦长40000的直线,再拖动调整弧长为80000的弧,很容易精确到个位,然后缩小10000倍,相当于精确到小数点后4位。
2 V& l6 a. Z3 J* e根据所需要的精度,依此类推。+ m: l& }$ p/ `$ `, M

* F. Y/ `0 ?/ Z) s. E2 l) \参考贴子
  r' ~/ P# S+ Bhttp://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
% s- m# L, `( S7 b' V老老实实计算出相应的半径和圆心角,画起来也是很快的,而且准确。

, m$ B; e% q2 b& r, a# @/ G7 I! X, Q3 I6 L: z
我也是这么弄的..........
- m0 Q! C$ M! F! M6 u% l看来我们都太规矩了点...
, S; R- u8 u4 c  H  E7 }" 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 | 显示全部楼层 来自: 中国云南昆明
我有个方法供大家参考,只是个想法,正确性请大家指教!如图,做直线的垂直平分线,镜像后,看那个菱形,调整角度到四个角相等的时候就是圆了 !角度是可以测量的!2 ~% U( }! u/ \- ~$ `' U

% C/ B1 ^  k7 q/ Q! v& y6 ], W/ A[ 本帖最后由 914438418 于 2008-9-26 11:30 编辑 ]
001.jpg
发表于 2008-9-26 13:26:01 | 显示全部楼层 来自: 中国辽宁营口
VBA代码:
7 ?$ W* {- q- K------------------------------------------------------------------------------------------------------------------------
6 O. h4 `) Q) g6 n8 K, J3 K4 {Dim S1 As String, S2 As String1 E% F- E) Z+ O+ N: M* J
Sub H()
' Z/ c$ t# y" u6 E+ i    Dim Space As Object, P As Variant, P2 As Variant, L As AcadLine, O: z( b& `# Y
    Dim A As Double, A1 As Double, Ag As Double, Ag1 As Double, Ag2 As Double, R As Double
8 j' i" ^7 A* f- Q2 Y    With ThisDrawing
1 N  o: D+ P( O        If .ActiveSpace = acModelSpace Then6 U( U6 S* U2 K2 P' W
            Set Space = .ModelSpace9 P( ?2 n5 ~: A3 Q
        Else" }: G) _9 K' @4 ~  q' \% m
            Set Space = .PaperSpace
+ C7 N" D: o- b( e& O        End If2 ~. P2 z7 t0 h; r
        On Error GoTo 100 Q" M/ P; P7 N1 Z0 T, s
        P = .Utility.GetPoint(, vbCrLf & "指定弦起点:" )
) i) v  @  n8 U! ~( Q3 w) H        On Error Resume Next5 }: b2 s: H/ E
        Do
; g" T  U/ g" v5 W$ r            Err.Clear
3 ~; O6 O/ {9 M% b            .Utility.InitializeUserInput 0, "Y N"5 |( ~; M! H. w5 t% \' d
            P2 = .Utility.GetPoint(P, vbCrLf & "指定弦端点或[保留弦(Y)/不保留弦(N)]<N>:" )$ A, Z" H# c! K$ h" c0 E* p; ~# F: g
            / f" b2 O5 l  i% L& O* C7 s
            If Err.Number = 0 Then
0 X! e% c9 Y. ^- X9 ~4 j                Set L = Space.AddLine(P, P2)
# {0 k$ B6 Z$ Y; j  Q                Do1 g5 u/ d# t# v7 a: V) }) `3 z3 g0 z
                    Err.Clear, {7 C5 l; R# B, T. B! a
                    .Utility.InitializeUserInput 6, "A C"& C' l2 c" c# z
                    A = .Utility.GetDistance(P, vbCrLf & "指定弧长或[画圆弧(A)/画圆(C)]<C>:" )
6 C, ?- R  E* R7 q8 Y$ H1 W                    If Err.Number = 0 And A > L.Length Then
0 f: \- i6 Y+ j# a" J                        Ag2 = 3.14159265358979' f3 V! j6 x% i, X+ n1 c
                        Do
# {. S. h3 J4 H" w. s# K& e0 Q                            Ag = (Ag1 + Ag2) / 2#+ Z% h: \3 `1 o9 Y
                            A1 = Ag * L.Length / Sin(Ag); x5 b' n4 U" j
                            If A1 = A Or Ag = Ag1 Or Ag = Ag2 Then Exit Do
; z% Q5 ?4 C# m% Y6 t                            If A1 > A Then
0 q. b; ]* R% C                                Ag2 = Ag$ X1 P& r  C5 t4 C
                            Else
2 K2 u' Y/ Q! H# |( d. U# k                                Ag1 = Ag
6 i6 ]4 ?7 t% {; ?  Q6 H* H* X' W1 t                            End If$ S/ M+ c# v$ g# o/ U
                        Loop
) [& {5 Q0 s# C4 O5 \  m. r                        R = A / Ag1 / 2#( \2 B7 h' o: S: C" w& [* m3 \
                        P = .Utility.PolarPoint(P, L.Angle + 1.5707963267949 - Ag, R)
: `4 m2 m5 v- K' z+ z8 y6 R                        If S2 = "A" Then/ \  ^) Y; ^0 f5 G
                            Space.AddArc P, R, 4.71238898038469 + L.Angle - Ag, 4.71238898038469 + L.Angle + Ag- K& n0 ~7 `2 i: f! \" I/ T
                        Else
) ^1 L4 ^' M8 p+ v* k                            Space.AddCircle P, R
) _# o3 W0 C3 B/ P2 z. e3 J                        End If" P8 A3 y/ ]( y( M- A9 ?2 a
                        If S1 = "N" Or S1 = "" Then L.Delete2 U! h# Z3 R, P& ~  y2 G2 K
                        Exit Do! n3 i& |4 ?7 d( N
                    ElseIf Err.Number = -2147352567 Then: C- m0 k" P1 }* T1 x& B, L5 T
                        L.Delete
9 Q, X# L! m. J* E8 P, q# l                        Err.Clear1 w2 \4 I: F% N5 {! `
                        Exit Do; o# `: {, y4 T* y8 s- o! t
                    ElseIf Err.Number <> 0 Then1 t9 y( Q% l1 q1 y" g3 r% A. ~
                        S2 = .Utility.GetInput
3 W) p2 q" n1 s  y, A& g6 c3 K                    End If
0 e/ p4 \& y& g: n                Loop
5 E- G1 h3 w0 R! }& V            ElseIf Err.Number = -2147352567 Then
1 K4 z5 g6 a* |, o: I                Exit Do# o0 [7 ^) K; N4 Y& E
            Else, ~8 W# b" W7 y* c  v5 j& G. G( r1 U
                S1 = .Utility.GetInput4 [0 y4 Z  W3 k( h" l" G$ }  z9 i
            End If* F7 S6 u) j) k
        Loop Until Err.Number = 0
/ S& h. @/ K+ i9 }: q* K$ |. `7 T9 F    End With
1 m, K! m. b( C# h10: End Sub
# f$ I+ _  j/ \; E------------------------------------------------------------------------------------------------------------------------
5 x1 m% C0 |! U$ X使用方法:# G) i+ z8 R" v) X
1.把上面代码粘贴到VBA编辑器Thisdrawing代码窗口,或下载附件解压后加载
6 j3 w0 H3 j2 Q+ R/ E2.Alt+F8,在弹出的"宏"对话框中点运行按钮,或在命令行键入"-vbarun",回车,"H",回车* G# M: C" l6 Z; I2 ?+ z9 s, U) ^5 a
3.按命令行提示操作

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

7.67 KB, 下载次数: 13

评分

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

查看全部评分

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

回复 16# bbgk 的帖子

记得在初中的时候算好像还有一个条件是:那条边到直径的距离的条件的!如果非要算数算。怕是要用积分了!你要再给出一个条件的。现在条件不足!
8 k2 k0 @1 t, O& |1 l% _! `' w) `1 {, l3 v' Y8 ]) n! R
[ 本帖最后由 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 | 显示全部楼层 来自: 中国江苏徐州
这问题应该简单吧!
- y: z- D8 t( H3 n
6 C1 K* d& z4 V3 q+ V8 V命令 :c# O4 x, l0 q; Y! ^% N6 l& H
命令:3p
5 Y* E3 l9 ?8 p" B- g/ x; o第一点在A点
" E+ x2 l* j" l' s1 t* m第二点在B点. p/ H, l# _0 _# l
命令: tan- `: V! a% p7 e2 C6 G
在圆弧上任意切一点) a* p" w. b$ O3 p- `9 I' z) u
OK
" _" q3 i$ v( x$ j' m+ ?! C3 W% j4 z! u: a. s. x
不知是不是楼主说的意思
4 p$ ?' t5 o' O- f  n8 _) w' P1 m3 B( p2 y' y; f& v4 Z4 u% q1 L
% z& S0 x) j1 G1 M: u" L
SANDIANYUAN.JPG - x9 V) M* n- ]; Q6 U# j4 U$ A

& l8 }9 M- N/ G4 N& K: J) V5 g[ 本帖最后由 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
1 `: S4 U6 p2 d, e/ m" h$ |这问题应该简单吧!; u& A* r+ I( H' W. U4 B" p2 C

; U5 ^+ v/ [9 w3 ]命令 :c4 h. E3 S- G% S9 \6 X) Z
命令:3p
7 x* o& E6 n" u) G( O$ `3 K第一点在A点( g/ W* v) P3 \/ G' ^
第二点在B点, j. ?6 k3 W$ E
命令: tan0 q- h' r" ~. F, H0 ?
在圆弧上任意切一点
# z6 P  D, q  E( _$ Y9 ~7 f  {OK! |. B1 ~: _! T- Z# q5 A
8 Q) g, y0 q( D0 K8 w0 B% v
不知是不是楼主说的意思
0 K  U5 ?) R! O9 b% ]! P8 [1 U! O" g! z2 }% P/ \( g9 w% i+ X9 e
& b  R5 n5 @6 @# w! b  u# u+ d% }
995240
. J: U7 p7 i+ W
咋就没想到3点画圆法呢,我真是笨死了!谢谢你!
发表于 2008-9-27 22:53:20 | 显示全部楼层 来自: 中国陕西西安

好东西好东好东西

好东西好东好东西

评分

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

查看全部评分

发表于 2008-9-28 09:25:30 | 显示全部楼层 来自: 中国上海
本要在此表示道歉...  j7 Y" m  V7 z0 U' C2 _
没有考虑清楚就说这个自己用算的...8 _5 j1 U+ b. s2 k' _
后来算了一下发现没那么好算.对大家带来的麻烦表示歉意.: _3 `; D& @0 a6 @
后来多方求教和查资料.总结一下可以按如下计算./ s1 l" y- C3 h/ [. C* o! ^% z. I5 T
设弦长为2a,弧长为2b,对应弧度为2x.半径为r* j" X3 G+ u5 @, Z. v* ?
则有:sinx=a/r,  t+ q, [1 x- P; u7 q
2b=2x*r
8 n1 P+ ^1 Y' \+ C# {6 @可得:sinx=x*a/b7 O4 ^6 Z# @* V, x& C& G" I' @' A/ s! h
这个方程解法相当麻烦.7 G9 y6 Z- F) d8 I8 r
最准确同时也是最麻烦的解法是使用傅立叶级数.  t& r0 E! U/ l' h. d4 {
但研究下来发现有其他的近似办法:$ w5 @) R7 }- f- {
1. 采用画图法:画出y=sinx和y=a/b*x两条函数曲线,交点处的x值及为所得.应该有2点.一个为小半弧,为一个大半弧  T4 `! t3 T& L7 s, T
2. sinx采用无穷级数展开.sinX=X-X3/3!+X5/5!-X7/7!.....考虑到精度问题这么多应该是够用了(X3表示X的3次方,这里不知道怎么标上标)- ]% u8 q! g& D
! r0 s* [4 {( b$ `
以上就是方程的解法...
8 H  G4 L4 j' I# e2 I和老大的给的宏那个好用大家自己看看吧.
4 g  [) {) [) I) d( a; {2 Y
/ G; x1 q* \) A0 k. {! x想问下xuj321123的方法是如何确定弧长的.我在使用到tan命令时点选空白的地方是没有用的.只有选一个本来有的线.这样弧长就和我所选的线位置相关,而不是一个确定的值了....

评分

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

查看全部评分

发表于 2008-9-28 10:04:32 | 显示全部楼层 来自: 中国江苏徐州
楼上的朋友,楼主说的很明白:已知“弧长”和“弦长”,有这两样你作不出图来?怎么是个空白地? :L
发表于 2008-9-28 11:09:19 | 显示全部楼层 来自: 中国云南昆明
“想问下xuj321123的方法是如何确定弧长的.我在使用到tan命令时点选空白的地方是没有用的.只有选一个本来有的线.这样弧长就和我所选的线位置相关,而不是一个确定的值了....”
9 P& ~" y" o) S* w
* ]  o# }; _8 X# z, P/ {. h2 }' M" o
; m; r3 O0 I: X- k你做一条辅助线,分别交于已知的两条线,三点画圆法就可以了,TAN命令都不要用!
发表于 2008-9-28 12:20:20 | 显示全部楼层 来自: 中国山东青岛
这个二次开发好像很难的样子。。。: ~. D* W" n8 m, [( Q# f

4 _( m0 \) ]3 Y' `这个圆弧按照楼主的意思好像并不是完全已知的,只知道弧长而已,哪来的三点
发表于 2008-9-28 12:27:32 | 显示全部楼层 来自: 中国上海
原帖由 xuj321123 于 2008-9-28 10:04 发表 http://www.3dportal.cn/discuz/images/common/back.gif0 h! w5 A0 Z: u) A8 J
楼上的朋友,楼主说的很明白:已知“弧长”和“弦长”,有这两样你作不出图来?怎么是个空白地? :L
7 |7 K- K7 j* K) ]
( `4 j2 D% P6 Q: |$ ~, Y9 h8 @
研究了一下你的画法.% x# [' N3 F" j" {/ t" F# s
不知道顺序是不是这样的8 W/ j4 F2 K' f1 M0 `8 w2 X

# g. A1 r9 F" J' v先画好一个线段.长度等于弦长,再画一个弧,长度等弧长. 9 V2 O) f; I3 z1 _! a5 ^
再利用这2条线使用3点画圆法,画出圆来.. I6 y4 }1 m4 t$ u" X2 V0 _# z
+ x4 w$ r4 ?2 ^  G! V
我画的时候没有先画那个弧,直接在一条线段上画圆的2个点. 没有实体可供tan ,所以画不出来,提示点无效.
& U, v7 F& @2 Q( G/ t7 I
' ]* _. s! z( |1 x问题是,你事先画好的弧如何保证他的弧长是楼主所需要的弧长?
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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