2016-03-02 99 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)。然後檢查兩條線與這條線的交點,並比較存在的交點。