gpt4 book ai didi

c# - 如何在 3d 空间 C# 中给定三个点找到圆的半径

转载 作者:行者123 更新时间:2023-11-30 16:51:25 26 4
gpt4 key购买 nike

我有沿圆的三个点的位置。 pt1(x1, y1,z1), pt2(x2, y2, z2), pt3(x3, y3,z3)。并且想要找到圆的半径。我已经有一个计算 2d 空间中半径的函数,我将其复制到这里

public static double ComputeRadius(Location a, Location b, Location c)
{
double x1 = a.x;
double y1 = a.y;
double x2 = b.x;
double y2 = b.y;
double x3 = c.x;
double y3 = c.y;
double mr = (double)((y2 - y1) / (x2 - x1));
double mt = (double)((y3 - y2) / (x3 - x2));

double xc = (double)((mr * mt * (y3 - y1) + mr * (x2 + x3) - mt * (x1 + x2)) / (2 * (mr - mt)));

double yc = (double)((-1 / mr) * (xc - (x1 + x2) / 2) + (y1 + y2) / 2);
double d = (xc - x1) * (xc - x1) + (yc - y1) * (yc - y1);

return Math.Sqrt(d);
}

最佳答案

如果您知道沿圆的点 pt1,pt2,pt3 的顺序,那么您可以使用图形方法:

  1. 从圆平面中每条线段的中间转换法线轴

    您的圆平面由您的 3 个点定义。所以法向量是

    n = (pt2-pt1) x (pt3-pt2)

    其中 x 是叉积,因此您有 2 行 (pt1,pt2)(pt2,pt3) 为黑色。中点很容易

    p0=0.5*(pt1+pt2)
    p1=0.5*(pt2+pt3)

    轴方向也可以通过叉积得到

    dp0=(pt2-pt1) x n
    dp1=(pt3-pt2) x n

    所以你有 2 个轴:

    pnt0(t)=p0+dp0*t
    pnt1(u)=p1+dp1*u

    其中 t,u 是标量参数 t,u=(-inf,+inf) 它只是从起始中点开始的轴位置 ...

  2. 交点是圆心

    所以找到intersection of 2 axises并将其命名为 pt0

  3. 计算中心与任何点之间的距离

    r=|pt1-pt0|

curve radius

抱歉,该图像是针对任何曲线的(懒得为圆形重新绘制,因为它几乎是一样的)。如果您不知道点的顺序,那么彼此最远的 2 个点就是外部点......如果它们是等距的,则顺序无关紧要

关于c# - 如何在 3d 空间 C# 中给定三个点找到圆的半径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33888218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com