0
我有兩個圓,每個圓由一箇中心點c =(x,y,z)定義一個半徑r和一個法向量n =(x,y,z)(垂直於圓的圓心平面)。3D中的圓圈交點
如何計算兩個這樣的圓的交點(不一定在同一平面內)?
如果沒有交點,但這些圓不平行,如何獲得點,如果增加或減少半徑直到它們接觸,這些圓會相交?
我有兩個圓,每個圓由一箇中心點c =(x,y,z)定義一個半徑r和一個法向量n =(x,y,z)(垂直於圓的圓心平面)。3D中的圓圈交點
如何計算兩個這樣的圓的交點(不一定在同一平面內)?
如果沒有交點,但這些圓不平行,如何獲得點,如果增加或減少半徑直到它們接觸,這些圓會相交?
如果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
)。然後檢查兩條線與這條線的交點,並比較存在的交點。