已知空间三点求球中心坐标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了已知空间三点求球中心坐标相关的知识,希望对你有一定的参考价值。

参考技术A 球体当球心坐标为(0,0,0)时候的函数为x²+y²+z²=r²,现在这情况相当于此情况下对球体在坐标系内的平移,假设x方向平移a,y方向平移b,z方向平移c后达到题目情况,则有函数式:(x-a)²+(y-b)²+(z-c)²=r²,r已知,三点坐标正好联立三个方程,解出a、b、c三个数,则a,b,c即为球心坐标,或者是-a,-b,-c为球心坐标,加减的偏移还得看方向。这是思路,请采纳。

三点求角

利用向量公式:
AB·AC=|AB|·|AC|·cos(theta)

#include<iostream>
#include<cmath>


int main()

{
    
    //90,45,45
    //double Ax(0),Ay(0),Bx(1),By(0),Cx(0),Cy(1);
    //60,60,60
    //double Ax(0),Ay(0),Bx(1),By(sqrt(3)),Cx(2),Cy(0);
    //90,60,30
    double Ax(0),Ay(0),Bx(1),By(0),Cx(0),Cy(sqrt(3));
    

    double AB=sqrt(pow(Bx-Ax,2)+pow(By-Ay,2));    // |AB|
    double AC=sqrt(pow(Cx-Ax,2)+pow(Cy-Ay,2));    // |AC|
    double BC=sqrt(pow(Cx-Bx,2)+pow(Cy-By,2));    // |BC|
    
    double AB_AC=(Bx-Ax)*(Cx-Ax)+(By-Ay)*(Cy-Ay);    // AB·AC
    double BA_BC=(Ax-Bx)*(Cx-Bx)+(Ay-By)*(Cy-By);    // BA·BC
    double CA_CB=(Ax-Cx)*(Bx-Cx)+(Ay-Cy)*(By-Cy);    // CA·CB
    
    double costhetaA=AB_AC/(AB*AC);    // cos∠A
    double costhetaB=BA_BC/(AB*BC);    // cos∠B
    double costhetaC=CA_CB/(AC*BC);    // cos∠C

    double AngleA=acos(costhetaA)*180/3.1415926;    // ∠A
    double AngleB=acos(costhetaB)*180/3.1415926;    // ∠B
    double AngleC=acos(costhetaC)*180/3.1415926;    // ∠C
    
    
    std::cout<<AngleA<<std::endl;
    std::cout<<AngleB<<std::endl;
    std::cout<<AngleC<<std::endl;
    
    return 0;
}


90
60
30


参考链接:
https://wenku.baidu.com/view/61c8631311a6f524ccbff121dd36a32d7375c77c.html

以上是关于已知空间三点求球中心坐标的主要内容,如果未能解决你的问题,请参考以下文章

三个点求圆心

空间三点圆心计算公式

请问已知任意三点坐标,怎样求空间圆平面的方程以及圆心坐标?

TOJ 2392 Bounding box(已知正n边形三点求最小矩形覆盖面积)

已知空间三点组成的面求该面上某点的Z值

已知多面体(全是三角形)的顶点坐标,如何判断空间一点是不是在多面体内?