QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
5天前
查看: 4801|回复: 32
收起左侧

[已解决] 圆的画法

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

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

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

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

评分

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

查看全部评分

发表于 2008-9-24 17:43:26 | 显示全部楼层 来自: 中国浙江温州
按实际来说,你说的条件本来可以确定一个圆了,但是AUTOCAD好象没有相关的命令,所以很难直接做出来,
1 b9 [% r! T( b) T7 X7 W5 m; r. T        有一个很笨的法子,画出已知直线,以直线两端随便画一个弧,选中这个弧,在工具-查询-列表显示中可以看到它的弧长,根据与已知弧长的差别进行拉动,反复查询,对比,拉动,最后得到想要的弧,就可以求出圆了.
: U( V9 W+ `* z+ r; k# Q    想看到比这个办法更高明的办法,期待中.

评分

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

查看全部评分

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

回复 2# 914438418 的帖子

是前面一种,请指教.
发表于 2008-9-24 21:20:47 | 显示全部楼层 来自: 中国吉林吉林市
3#的办法是可行的,不过要采用2005llnn的"精确选点法",就更容易了。7 z5 S8 s& ~- I0 W
比如:要做一个弦长为4,弧长为8的圆,可以先做一个弦长40000的直线,再拖动调整弧长为80000的弧,很容易精确到个位,然后缩小10000倍,相当于精确到小数点后4位。! }" X- G: K$ v6 D; \- @
根据所需要的精度,依此类推。
/ C# o; K2 k" e/ H& Y/ m
, z$ ^2 Q2 B- {7 y" Q- y参考贴子) e8 Q9 k4 y9 ]# X( ]8 D+ 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.gif
0 C. C# D9 ]1 ^2 }( n老老实实计算出相应的半径和圆心角,画起来也是很快的,而且准确。

# n' h+ p6 x& }6 Z+ I. y* ?: [* G5 |7 b. J9 ?+ E& @; D
我也是这么弄的........../ R: I* c. R0 R* J+ s
看来我们都太规矩了点...5 S) h/ L% q9 u) W% J3 r
不知变通啊
 楼主| 发表于 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 | 显示全部楼层 来自: 中国云南昆明
我有个方法供大家参考,只是个想法,正确性请大家指教!如图,做直线的垂直平分线,镜像后,看那个菱形,调整角度到四个角相等的时候就是圆了 !角度是可以测量的!
4 @/ D0 S0 O3 j/ W2 U9 ^) B6 q; P7 A
[ 本帖最后由 914438418 于 2008-9-26 11:30 编辑 ]
001.jpg
发表于 2008-9-26 13:26:01 | 显示全部楼层 来自: 中国辽宁营口
VBA代码:
  Z7 n% Y( g! L2 t) }------------------------------------------------------------------------------------------------------------------------/ B7 i, B7 R  t$ L* L; r5 {
Dim S1 As String, S2 As String# E  M+ I" F* Y+ Y
Sub H()
: w: S$ f1 [: x    Dim Space As Object, P As Variant, P2 As Variant, L As AcadLine9 L8 b9 u" z$ S9 R9 _3 \( W
    Dim A As Double, A1 As Double, Ag As Double, Ag1 As Double, Ag2 As Double, R As Double
; T* H7 m& b: V+ O1 w+ ], ~( G( s    With ThisDrawing
0 P2 C& u+ ^& o2 b0 c) ]3 Z        If .ActiveSpace = acModelSpace Then
" L+ N% ?" h1 M            Set Space = .ModelSpace
7 z. e; S# s* V7 p. g: C/ d" _0 f        Else/ Z0 s8 }5 T6 e) P( {# ?8 d* E
            Set Space = .PaperSpace
6 U" H( z  C$ u3 r, K: _        End If
' @2 S7 Y4 B- {; E/ n; L+ f+ F        On Error GoTo 104 p+ ]; ^; C. u3 y2 o+ N6 t
        P = .Utility.GetPoint(, vbCrLf & "指定弦起点:" )
+ S$ W+ @/ q) V9 t; U+ j        On Error Resume Next! M# i5 r) |. b9 z
        Do$ [/ G+ r* P' d" |0 A% T
            Err.Clear
! A  d. p: d$ U: e7 o            .Utility.InitializeUserInput 0, "Y N"0 |5 n) f& k; D" i5 I
            P2 = .Utility.GetPoint(P, vbCrLf & "指定弦端点或[保留弦(Y)/不保留弦(N)]<N>:" )$ q9 n  P! I1 Q. A
            
" R+ S! b7 N' q  x, o            If Err.Number = 0 Then
: |* z" Y. b5 M" V! f                Set L = Space.AddLine(P, P2)
) f( y9 F# h$ X. o0 Z                Do) s7 [$ u0 U' c1 M7 m
                    Err.Clear
+ c) N2 g4 L4 |# |1 k/ B: r                    .Utility.InitializeUserInput 6, "A C"  i$ K( O( x; E9 k% G
                    A = .Utility.GetDistance(P, vbCrLf & "指定弧长或[画圆弧(A)/画圆(C)]<C>:" )' U6 Q3 K. p7 X
                    If Err.Number = 0 And A > L.Length Then9 D6 T1 b( J7 [
                        Ag2 = 3.141592653589793 D/ B: `! z2 b& z% w
                        Do5 j' K8 N, s% A- O' p
                            Ag = (Ag1 + Ag2) / 2#
: }( d4 n% \+ ~. c* k! t$ J$ M                            A1 = Ag * L.Length / Sin(Ag)' Q4 K- k+ f) q+ i) B- R
                            If A1 = A Or Ag = Ag1 Or Ag = Ag2 Then Exit Do+ T8 s- N7 u5 q9 g7 ?9 |
                            If A1 > A Then
. C& d3 V; [% j3 T8 D1 H                                Ag2 = Ag
( x* \0 ~+ z0 |- W: V. A) F6 i                            Else
/ G5 n( `+ N5 S* n. ^                                Ag1 = Ag
  v1 L4 x. k4 x% h% u( O                            End If
# |' H( T; j6 ^- W- k                        Loop
9 z9 E! w' R8 k$ `/ p/ D! }                        R = A / Ag1 / 2#
! Y2 ^) w5 e6 P( H. Q                        P = .Utility.PolarPoint(P, L.Angle + 1.5707963267949 - Ag, R)
/ P% U$ e5 \$ N/ g3 U9 Q! @                        If S2 = "A" Then) b  y1 G& L7 i* K. z, ^5 g" k0 q
                            Space.AddArc P, R, 4.71238898038469 + L.Angle - Ag, 4.71238898038469 + L.Angle + Ag
9 [2 w# Y- G* }3 }# N                        Else
& C- S7 S1 N* \- P3 R9 k                            Space.AddCircle P, R% L8 w/ J) L  {6 ~5 L
                        End If
1 w; L9 X7 ~  j. @. b                        If S1 = "N" Or S1 = "" Then L.Delete3 ^9 N' `  o& C( v6 p+ c$ K
                        Exit Do
: V- R, I' X; V  {5 n3 f) x                    ElseIf Err.Number = -2147352567 Then
  V2 l2 w+ f* D. Q2 I                        L.Delete2 i3 O9 _- A: Q- M5 O
                        Err.Clear
3 F9 c' y* J. E- N- c* u, d                        Exit Do4 g% _& i7 F" D0 C
                    ElseIf Err.Number <> 0 Then3 I8 G$ `! l+ ?% p/ T9 S' {6 i6 v9 d+ }
                        S2 = .Utility.GetInput0 E% j% K5 b. p9 n. B
                    End If
1 v- T# _+ y8 _; u                Loop  `1 y& L( ~$ |, K- w! Q
            ElseIf Err.Number = -2147352567 Then! ]8 i3 e* m% W. c0 N5 n
                Exit Do
7 E2 X, H! G8 l4 H' e            Else
7 L( z5 Z  L2 A) Z2 G- X) m" f0 ~  m                S1 = .Utility.GetInput1 [/ o& d& a5 @
            End If; m' M- O* A' o! A
        Loop Until Err.Number = 0
$ W- A/ \  p# K* l+ \* ?+ X    End With
# ]6 b6 ?# W; J10: End Sub# e. w/ n& k; a6 L: e
------------------------------------------------------------------------------------------------------------------------
2 }. Z) M5 F* Z% h+ W) Y; W* x6 @( [使用方法:% {9 o4 z' R0 w5 N7 f4 y
1.把上面代码粘贴到VBA编辑器Thisdrawing代码窗口,或下载附件解压后加载
8 n) v+ p3 @' _! h2.Alt+F8,在弹出的"宏"对话框中点运行按钮,或在命令行键入"-vbarun",回车,"H",回车
* v, e3 l, m9 Y, `+ r! `8 O' K) |) J6 o3.按命令行提示操作

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

7.67 KB, 下载次数: 13

评分

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

查看全部评分

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

回复 16# bbgk 的帖子

记得在初中的时候算好像还有一个条件是:那条边到直径的距离的条件的!如果非要算数算。怕是要用积分了!你要再给出一个条件的。现在条件不足!
$ E4 N: G9 E& g* s5 X5 `8 L- b8 C0 q
$ u! U2 `& Z/ _  T) 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 | 显示全部楼层 来自: 中国江苏徐州
这问题应该简单吧!4 l/ a2 {: W6 D
2 ~' Z# G& R& {! e9 C+ w  p
命令 :c
3 Z0 k; N; H8 x+ c命令:3p
- S6 v+ f6 b; u# b  ~第一点在A点
$ ~. K' w. c* g+ Z2 R第二点在B点
, n$ d1 E* v$ |1 O7 A4 ^& g命令: tan
# v9 x$ p) q6 t! J5 [; A在圆弧上任意切一点
3 S: f$ n/ W  [( L9 z0 K: aOK
$ W9 ?) W  T6 E8 J* S) N3 H( u4 y
, y& _& O/ I0 n3 {- }, f不知是不是楼主说的意思
/ f# X/ r& I7 I8 H' ?3 H; g+ `! z" c/ E$ L) m  b
) [  h' q( u+ K7 \* }( H: ]
SANDIANYUAN.JPG
, ]+ d$ w- O% N* J+ X
3 ^$ Z2 @& V, K4 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  W/ l" u; i5 N  `
这问题应该简单吧!
6 s& p# ], I& x% k% M, U6 n0 q( ]" T" a0 L
命令 :c
, J# f8 W* G  x6 w命令:3p  f6 {+ Y5 `( a, }9 b
第一点在A点+ x/ k) s2 G! u& A! Q$ c' g
第二点在B点
3 r0 R" `, J# m& m  ~3 u命令: tan; h/ ]- W( |* G/ v8 r
在圆弧上任意切一点7 h1 |: ?5 `0 Z0 f. J8 e; k
OK+ x, Q9 H" i, E- d0 k" l

1 c$ W. t8 x" z: b不知是不是楼主说的意思4 C2 S5 c% F6 y2 [
! u/ g  x2 d3 E9 |& _% N
9 y* M7 q+ l1 J% x& R
995240
2 K. K' }- [1 q8 ]& {1 v9 H
咋就没想到3点画圆法呢,我真是笨死了!谢谢你!
发表于 2008-9-27 22:53:20 | 显示全部楼层 来自: 中国陕西西安

好东西好东好东西

好东西好东好东西

评分

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

查看全部评分

发表于 2008-9-28 09:25:30 | 显示全部楼层 来自: 中国上海
本要在此表示道歉...
; s/ y  b9 X7 O- C' M: Z没有考虑清楚就说这个自己用算的...
: S$ l4 v  [+ U$ A后来算了一下发现没那么好算.对大家带来的麻烦表示歉意.0 N6 ?$ V2 l1 ?8 H
后来多方求教和查资料.总结一下可以按如下计算.& x% _; c6 o2 X% B8 N
设弦长为2a,弧长为2b,对应弧度为2x.半径为r
/ {  G# R) J! t2 z则有:sinx=a/r,
* N# A. m, U" a; p- _: I0 O1 v2b=2x*r4 `: p2 b% l9 }: }6 U/ {
可得:sinx=x*a/b
8 A% z% l: v' g0 l( m0 M7 U这个方程解法相当麻烦.& c2 J4 t$ ~, {( M8 J
最准确同时也是最麻烦的解法是使用傅立叶级数.
% E. u0 S5 ~5 z9 ?; ^但研究下来发现有其他的近似办法:
) ]( w2 {) I3 _% k1. 采用画图法:画出y=sinx和y=a/b*x两条函数曲线,交点处的x值及为所得.应该有2点.一个为小半弧,为一个大半弧0 \% O$ z" O4 [9 ~& a
2. sinx采用无穷级数展开.sinX=X-X3/3!+X5/5!-X7/7!.....考虑到精度问题这么多应该是够用了(X3表示X的3次方,这里不知道怎么标上标)7 c% _  z6 z, m1 Y# O2 \! d! i$ q

, i0 z3 N7 e7 B" O. @$ D. x以上就是方程的解法...
5 O1 P  `- ?$ f5 L. ^和老大的给的宏那个好用大家自己看看吧.
- ~+ C5 W- h! |% V* }7 A# L; Q# I" z" ]. R0 g8 h
想问下xuj321123的方法是如何确定弧长的.我在使用到tan命令时点选空白的地方是没有用的.只有选一个本来有的线.这样弧长就和我所选的线位置相关,而不是一个确定的值了....

评分

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

查看全部评分

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

8 ^9 }8 O8 X/ c6 l2 _
* w' y7 \4 K( d. k. x* d你做一条辅助线,分别交于已知的两条线,三点画圆法就可以了,TAN命令都不要用!
发表于 2008-9-28 12:20:20 | 显示全部楼层 来自: 中国山东青岛
这个二次开发好像很难的样子。。。9 C: k# U8 t1 ]& L/ j0 v
9 @/ Y- B9 @# B: W9 x# g
这个圆弧按照楼主的意思好像并不是完全已知的,只知道弧长而已,哪来的三点
发表于 2008-9-28 12:27:32 | 显示全部楼层 来自: 中国上海
原帖由 xuj321123 于 2008-9-28 10:04 发表 http://www.3dportal.cn/discuz/images/common/back.gif
  N! d5 s2 k0 s( Y9 s, \楼上的朋友,楼主说的很明白:已知“弧长”和“弦长”,有这两样你作不出图来?怎么是个空白地? :L
$ b( K/ N2 K6 j3 \1 V
" x6 S3 N) A3 {% Z- u9 C
研究了一下你的画法.
. z" t' N& e. x' ^9 f不知道顺序是不是这样的
( k7 x( o: W) I8 K" k6 s* t
# s% W3 u" H$ w' q先画好一个线段.长度等于弦长,再画一个弧,长度等弧长. - o! s% Z3 R$ N
再利用这2条线使用3点画圆法,画出圆来.
, o2 Z- p5 f* j0 D5 m+ R9 B
7 w1 s6 W! a' ^. h# P, F3 c我画的时候没有先画那个弧,直接在一条线段上画圆的2个点. 没有实体可供tan ,所以画不出来,提示点无效., P* E' _* z+ R: a
, s- y4 ~% m) ~: B
问题是,你事先画好的弧如何保证他的弧长是楼主所需要的弧长?
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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