找到弧的算法,其中心,半径和角度给出3个点

ibr*_*ker 14 algorithm math

给出3分A,B和C.

在此输入图像描述

我如何找到并从A开始,从C结束并通过B; r和r'的中心坐标,半径和角度?

在此输入图像描述

Jos*_*hua 6

有几种方法可以做到这一点.这是一个算法:

  1. 得到你的COORDS

    A = {xA,yA}

    B = {xB,yB}

    C = {xC,yC}

    d = {xd,yd}

  2. 计算AB和BC线的中点

    mid_AB = {(xA + xB)/ 2,(yA + yB)/ 2}

    mid_BC = {(xB + xC)/ 2,(yB + yC)/ 2}

  3. 找到AB和BC线的斜率

    slope_AB =(yB-yA)/(xB-xA)

    slope_BC =(yC-yB)/(xC-xB)

  4. 构建贯穿中间点PERPENDICULAR到AB和BC的线路(感谢Yves捕获负面信息!)

    Slope_perp_AB = - (slope_AB)^( - 1)

    Slope_perp_BC = - (slope_BC)^( - 1)

    ***带有Slope_perp_AB的行贯穿mid_AB

    ***使用Slope_perp_BC的行贯穿mid_BC

  5. 将两个方程设置为彼此相等并求解以找到交点!这给你点d = {xd,yd} !!!

现在用中心点d计算半径和角度是微不足道的!

  • 演示 [3 点的圆方程](http://paulbourke.net/geometry/circlesphere/) (2认同)

Yve*_*ust 5

圆的中心与三个给定点等距:

(X-Xa)^2+(Y-Ya)^2 = (X-Xb)^2+(Y-Yb)^2 = (X-Xc)^2+(Y-Yc)^2
Run Code Online (Sandbox Code Playgroud)

从第二个和第三个成员中减去第一个成员,我们在重新组合之后得到:

2(Xa-Xb) X + 2(Ya-Yb) Y + Xb^2+Yb^2-Xa^2-Ya^2 = 0
2(Xa-Xc) X + 2(Ya-Yc) Y + Xc^2+Yc^2-Xa^2-Ya^2 = 0
Run Code Online (Sandbox Code Playgroud)

两个未知数的两个方程的线性系统很容易用Cramer的规则求解.

可以使用围绕中心的笛卡尔到极坐标变换找到半径和角度:

R= Sqrt((Xa-X)^2+(Ya-Y)^2)

Ta= atan2(Ya-Y, Xa-X)
Tc= atan2(Yc-Y, Xc-X)
Run Code Online (Sandbox Code Playgroud)

但是你仍然会遗漏一件事:弧的相关部分是什么?小转弯还是大转弯?从TaTb或者从Tb2 PiTa + 2 Pi,还是什么?尝试的答案远没有那么明显,尝试一下(因为三个角度Ta,Tb并且Tc不确定为多个,2 Pi你不能对它们进行排序)!

提示:考虑三角形ABC区域的符号,恰好是系统决定因素的一半.它会告诉你B是否位于AC的左侧或右侧.

  • 我明白了。我的意见是,堆栈交换应该是一个“问答”网络,而不是一个“问题、半答案和提示”网络。也许我只是心情不好。 (3认同)