明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4650|回复: 7

三点如何定圆心

[复制链接]
发表于 2006-12-17 22:16:00 | 显示全部楼层 |阅读模式

大家帮我解决一个问题,是通过三点(不在一条直线上)来确定圆心。最好能通过图示来说明,而且对于过三点形成的三角形的任意两边作中垂线求交点的方法排除在外。因为考虑的斜率的不存在需要较多的错误处理程序。谢谢大家,在此给大家提供一段程序,如果可以能给我解释一下也可以。

Dim省去了

xy=pt1(0)^2+pt1(1)^2

xyse=xy-pt3(0)^2-pt3(1)^2

xysm=xy-pt2(0)^2-pt2(1)^2

xy=(pt1(0)-pt2(0))*(pt1(1)-pt3(1))-(pt1(0)-pt3(0))*(pt1(1)-pt2(1))

ptcen(0)=(xysm*(pt1(1)-pt3(1))-xyse*(pt1(1)-pt2(1)))/(2*xy)

ptcen(1)=(xyse*(pt1(0)-pt2(0))-xysm*(pt1(0)-pt3(0)))/(2*xy)

ptcen(2)=0

发表于 2006-12-24 17:26:00 | 显示全部楼层

测试了一下公式是可行的,原理到网上找了半天,都是用垂线找圆心.

需要再找资料进行证明
Dim pt1(0 To 2) As Double, pt2(0 To 2) As Double, pt3(0 To 2) As Double, ptcen(0 To 2) As Double
pt1(0) = 10: pt1(1) = 5: pt1(2) = 20
pt2(0) = 110: pt2(1) = 15: pt2(2) = 120
pt3(0) = 15: pt3(1) = -15: pt3(2) = 20
xy = pt1(0) ^ 2 + pt1(1) ^ 2
xyse = xy - pt3(0) ^ 2 - pt3(1) ^ 2
xysm = xy - pt2(0) ^ 2 - pt2(1) ^ 2
xy = (pt1(0) - pt2(0)) * (pt1(1) - pt3(1)) - (pt1(0) - pt3(0)) * (pt1(1) - pt2(1))
ptcen(0) = (xysm * (pt1(1) - pt3(1)) - xyse * (pt1(1) - pt2(1))) / (2 * xy)
ptcen(1) = (xyse * (pt1(0) - pt2(0)) - xysm * (pt1(0) - pt3(0))) / (2 * xy)
ptcen(2) = 0

Dim objLine As AcadLine
Set objLine = ThisDrawing.ModelSpace.AddLine(pt1, ptcen)
Set objLine = ThisDrawing.ModelSpace.AddLine(pt2, ptcen)
Set objLine = ThisDrawing.ModelSpace.AddLine(pt3, ptcen)

发表于 2006-12-26 19:51:00 | 显示全部楼层

这个公式是根据圆心到三点的距离相等导出的.

设圆点为O(O(0)=0,O(1)=0),三点为P1(P1(0),P1(1)),P2(P2(0),P2(1)),P3(P3(0),P3(1)),所求的圆心为Pc(Pc(0),Pc(1))则根据向量运算:

|OP1-OPc|=|OP2-OPc|=|OP3-OPc|    ......................(1)

式中OP1代表从圆点指向P1的向量,OP2,OP3,OPc意义相同;

|  | 表示取两向量的差向量的模.

向量|OP1-OPc|的差向量的模为:

|(OP1x-OPcx)i+(OP1y-OPcy)j| ...........................(2)

其中:

OP1x表示OP1向量在X轴上的投影向量即(P1(0)-O(0))=P1(0)

OPcx=(Pc(1)-O(1))=Pc(1)

其余各项表示相同.

则由(2)式导出|(P1(0)-Pc(0))*i + (P1(1)-Pc(1))*j|.............(3)

由(3)式取模得sqrt((P1(0)-Pc(0))^2 +(P1(1)-Pc(1))^2)..........(4)

由(4)和(1)经同时平方得出:

(P1(0)-Pc(0))^2 +(P1(1)-Pc(1))^2= _

(P2(0)-Pc(0))^2 +(P2(1)-Pc(1))^2= _

(P3(0)-Pc(0))^2 +(P3(1)-Pc(1))^2        ....................(5)

由(5)式可得三方程(略).

由其中两方程:

(P1(0)-Pc(0))^2 +(P1(1)-Pc(1))^2= _

(P2(0)-Pc(0))^2 +(P2(1)-Pc(1))^2    ..................(方程1)

(P1(0)-Pc(0))^2 +(P1(1)-Pc(1))^2= _

(P3(0)-Pc(0))^2 +(P3(1)-Pc(1))^2    ..................(方程2)

解方程组即可推导得到Pc(0),Pc(1)即上面的公式(略).

用此推导方法加上点的Z方向的坐标,即可得出三维坐标下的求圆心的公式.不过推导过程更加复杂,举一方程:

(P1(0)-Pc(0))^2 +(P1(1)-Pc(1))^2 +(P1(2)-Pc(2))^2= _

(P2(0)-Pc(0))^2 +(P2(1)-Pc(1))^2 +(P2(2)-Pc(2))^2 ...........(方程1)

发表于 2006-12-26 23:50:00 | 显示全部楼层
xing
发表于 2006-12-30 09:01:00 | 显示全部楼层
如果说在AutoCAD中实现三点定圆心,最简单的方法就是通过三点画个圆,圆的圆心就是你需要的位置了。只需要一个命令。
发表于 2006-12-30 09:56:00 | 显示全部楼层
要用VBA处理,必须要用上面的数学公式,用Sendcommand处理三点定圆解决,我更喜欢用数学公式.
发表于 2007-1-1 12:10:00 | 显示全部楼层
我用的是中垂线相交取中心点。这个方法是没有任何问题。很好用。
发表于 2007-1-2 18:36:00 | 显示全部楼层

就是嘛`!用三点画圆不就是简单了

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 21:53 , Processed in 0.171450 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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