2016-03-02 97 views
0

我有两个圆,每个圆由一个中心点c =(x,y,z)定义一个半径r和一个法向量n =(x,y,z)(垂直于圆的圆心平面)。3D中的圆圈交点

如何计算两个这样的圆的交点(不一定在同一平面内)?

如果没有交点,但这些圆不平行,如何获得点,如果增加或减少半径直到它们接触,这些圆会相交?

回答

2

如果n1 x n2 = 0那么法线向量是(反)共线,并且平面是平行的。

它们是相同的,如果Dot(c1-c2, n1) = 0,否则圆形交叉是不可能的。

两个圆在同一平面的情况。我假定r2>=r1

cdiff = (c1-c2) 
cdifflen = cdiff.Length 

if cdifflen > r1 + r2 then no intersection 
if cdifflen = r1 + r2 then intersection exists in one point 
p = (c1 * r2 + c2 * r1)/(r1 + r2) 

if cdifflen < r2 - r1 then no intersection 
if cdifflen = r2 - r1 then intersection exists in one point 
p = (c1 - c2) * r2 /(r2 - r1) 

otherwise there are two intersection points 
cdiffnorm = cdiff.Normalized //unit vector 
cdiffperp = cdiffnorm * n1.Normalized 
q = cdifflen^2 + r2^2 - r1^2 
dx = 1/2 * q/cdifflen 
dy = 1/2 * Sqrt(4 * cdifflen^2 * r2^2 - q^2)/cdifflen 
p1,2 = c1 + cdiffnorm * dx +/- cdiffperp * dy 

一些公式解释here

如果平面是不平行的,它们的交点与方向矢量的线这条线的

dl = n1 x n2 

基点可能使用中找到Geometric Tools Engine(文件GteIntrPlane3Plane3.h)。然后检查两条线与这条线的交点,并比较存在的交点。