Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 三维空间中的圆交点_Math_3d_Geometry_Intersection - Fatal编程技术网

Math 三维空间中的圆交点

Math 三维空间中的圆交点,math,3d,geometry,intersection,Math,3d,Geometry,Intersection,我有两个圆,每个圆由中心点c=(x,y,z)半径r和法向量n=(x,y,z)(垂直于圆的平面)定义 如何计算两个这样的圆的交点(不一定在同一平面上) 如果没有交点,但这些圆不是平行的,那么如果增加或减小半径直到它们接触,如何获得这些圆相交的点?如果n1 x n2=0则法向量(反)共线,平面平行 如果圆点(c1-c2,n1)=0,则它们是相同的,否则圆相交是不可能的 在同一平面上有两个圆的情况。我假设r2>=r1 cdiff = (c1-c2) cdifflen = cdiff.Length

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

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


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

如果
n1 x n2=0
则法向量(反)共线,平面平行

如果圆点(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

可以使用(文件
gteintplane3.h
)找到该线的基点。然后检查两个圆与该线的交点,并比较交点(如果存在)。

如果
n1 x n2=0
则法向量(反)共线,平面平行

如果圆点(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
可以使用(文件
gteintplane3.h
)找到该线的基点。然后检查两个圆与该线的交点,并比较交点(如果存在)