C# 根据已知信息计算球体上的圆与球体的交点。;

C# 根据已知信息计算球体上的圆与球体的交点。;,c#,unity3d,C#,Unity3d,我想解决的问题是: 使用以下信息计算球与圆的交点 关于圆的已知信息: 1.中心A的坐标已知,且中心A位于球面上。 2.已知圆A的半径ra。 3.知道圆上点B的坐标 关于球的已知信息: 1.已知球的圆心B的坐标。 2.已知球的半径rb 图片如下 根据以上信息,我希望计算交点的坐标。 然后将算法放入C#,这样平面上的关联点可以放置在球体上,并且这些点之间的距离不会改变。 如果上述方法有效,我可以在球体上放置许多与A等距的点,放置后,这些点与A之间的距离不变 我以前试过: 1.用联立方程组解决这个问

我想解决的问题是: 使用以下信息计算球与圆的交点

关于圆的已知信息: 1.中心A的坐标已知,且中心A位于球面上。 2.已知圆A的半径ra。 3.知道圆上点B的坐标

关于球的已知信息: 1.已知球的圆心B的坐标。 2.已知球的半径rb

图片如下

根据以上信息,我希望计算交点的坐标。 然后将算法放入C#,这样平面上的关联点可以放置在球体上,并且这些点之间的距离不会改变。 如果上述方法有效,我可以在球体上放置许多与A等距的点,放置后,这些点与A之间的距离不变

我以前试过: 1.用联立方程组解决这个问题,但不幸的是,最终结果不可用。 2.试着通过两个圆的相交来得到结果,但是圆和圆都是平面关系,只能得到x,y的坐标,而不能得到z的坐标。 我通过下面的代码成功地在球体上放置了一些点,但是点和点之间的距离发生了变化,点的数量越多,这种变化就越明显,我不希望它们的距离发生变化,所以我想出了这个方法。通过将圆与球相交来确定这些点的位置

参数(列表原子)存储平面上的一些点,(双r)是球的半径。通过此方法,平面上的点将“粘贴”到球体上

/// <summary>
///  Stick the atom to the sphere
/// </summary>
private void BendAtom(List <Atom> atoms,double r)
{
    double L = 2d * Math.PI * r;
    double w = L;// * 2d;
    double h = L / 2d;
    for (int i = 0; i < atoms.Count; i++)
    {
        atoms[i].Point.x = (float)((360 / w) * atoms[i].Point.x - 180);
        atoms[i].Point.y = (float)((180 / h) * atoms[i].Point.y - 90);
    }
    for (int i = 0; i < atoms.Count; i++)
    {
        double lat = atoms[i].Point.x;
        double lng = atoms[i].Point.y;
        double phi = ((90d - lat) * Math.PI) / 180d;
        double theta = ((180 - lng) * Math.PI) / 180d;
        double x = r * Math.Sin(phi) * Math.Cos(theta);
        double y = r * Math.Cos(phi);
        double z = r * Math.Sin(phi) * Math.Sin(theta);
        atoms[i].Point.x = (float)x;
        atoms[i].Point.y = (float)y;
        atoms[i].Point.z = (float)z;
    }
 }
//
///把原子粘在球体上
/// 

private void BendAtom(List

再次标记此循环。它不是c代码。为什么要删除您的问题并重新发布?您是否希望得到不同的结果?我的问题是否有问题?我想用c sharp语言计算交点。