- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
两圆相交求交点坐标
两圆相交,求交点坐标
最近画钣金,遇到圆相交问题,参考了网上的程序,用圆的参数方程求,下了相关程序,竟然有些点计算错误,于是决定自己重写。
第二种原理是解两圆方程
(x-x0)^2+(yy0)^2=r0^2
(x-x1)^2+(yy1)^2=r1^2
太烦了这个二元二次方程,试了好久,没弄出结果来。
第三种原理是如图
不需解二元二次方程,两圆相交,圆心距o0o1是知道的,割线AB距离是可求的,AB和o0o1交点Q平分AB两条线互为垂直。
QB^2=Bo1^2-Qo1
QB^2=Bo0^2 -(o0o1-Bo1)^2
o0o1=Qo0+Qo1
可解出QB、QA、Qo0、Qo1。
知道了圆心o0、o1坐标,可解出Q坐标,从而知道A、B坐标,问题求解完毕。
这种方法应该是较好的,原理简单,结果正确。就用第三种方法。
发现AUTOCAD内嵌了VBA,画图嘛用AUTOCAD最好了,还能编程,就用AUTOCAD2008
贴几张效果图、并把相交函数贴上,因为整个VBA贴上太不方便了。
参数:
circle_circle
功能:两圆相交,求交点坐标
参数xx0 ,yy0 ,r0 第一个圆的圆心坐标,半径
参数xx1 ,yy1 ,r1 第二个圆的圆心坐标,半径
X_1 ,Y_1; x_2 y_2返回两个交点坐标
相切情况以后加,因为我画钣金相切情况没有
Sub circle_circle(ByVal xx0 As Long, ByVal yy0 As Long, ByVal r0 As Double, ByVal xx1 As Long, ByVal yy1 As Long, ByVal r1 As Double, ByRef X_1
As Long, ByRef Y_1 As Long, ByRef x_2 As Long, ByRef y_2 As Long)
Dim k As Double, k1 As Double
Dim intL As Double
Dim l0 As Double, l1 As Double, lh As Double
Dim center_x As Double, center_y As Double
Dim angl As Double
Dim x0 As Double, y0 As Double, x1 As Double, y1 As Double
x0 = CDbl(xx0)
y0 = CDbl(yy0)
x1 = CDbl(xx1)
y1 = CDbl(yy1)
intL = Sqr(Pow(y1 - y0, 2) + Pow(x1 - x0, 2))
l1 = (Pow(r0, 2) - Pow(r1, 2) - Pow(intL, 2)) / (-2 * intL)
l0 = intL - l1
lh = Sqr(Pow(r1, 2) - Pow(l1, 2))
Ys=KK*double(Xs-X0)+double(Y0);
If (xx1 = xx0) Then 圆心垂直,交点水平对称
angl = 90
If (y1 y0) Then
center_x = x0
center_y = y0 + l0
x_2 = CLng(center_x - lh)
y_2 = CLng(center_y)
X_1 = CLng(center_x + lh)
Y_1 = CLng(center_y)
Else
center_x = x0
center_y = y1 + l1
x_2 = CLng(center_x - lh)
y_2 = CLng(center_y)
X_1 = CLng(center_x + lh)
Y_1 = CLng(center_y)
End If
ElseIf (yy1 = yy0) Then 圆心水平,交点垂直对称
If (x1 x0) Then
center_x = x0 + l0
center_y = y0
x_2 = CLng(center_x)
y_2 = CLng(center_y - lh)
X_1 = CLng(center_x)
文档评论(0)