Ubuntu 24.04 自托管 SpacetimeDB 完整指南:systemd 服务、Nginx 反向代理与 HTTPS 实战
2026/9/13 19:39:49
#include<iostream>#include<cmath>#include<iomanip>#defineM_PI3.1415926usingnamespacestd;// 定义二维点结构structPoint{doublex;doubley;Point(doublex=0,doubley=0):x(x),y(y){}};// 计算两点间距离doubledistance(constPoint&p1,constPoint&p2){returnsqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y));}// 根据旋转前后点和旋转角度求圆心PointfindRotationCenter(constPoint&A,constPoint&B,doubletheta){Point center;// 特殊情况处理if(fabs(theta)<1e-15){cout<<"错误:旋转角度太小或为零"<<endl;center.x=NAN;center.y=NAN;returncenter;}// 计算AB中点PointM((A.x+B.x)/2.0,(A.y+B.y)/2.0);// 计算AB的长度和中点到圆心的距离doubleAB=distance(A,B);doubleOM_distance=AB/(2.0*tan(theta/2.0));// 中点到圆心的距离// 计算AB的法线方向doubledx=B.x-A.x;doubledy=B.y-A.y;// 归一化doublelen_AB=sqrt(dx*dx+dy*dy);dx/=len_AB;dy/=len_AB;// 法向量(有两种可能方向)doublenx1=-dy;doubleny1=dx;doublenx2=dy;doubleny2=-dx;// 计算两个可能的圆心Pointcenter1(M.x+OM_distance*nx1,M.y+OM_distance*ny1);Pointcenter2(M.x+OM_distance*nx2,M.y+OM_distance*ny2);// 通过叉积符号判断哪个是正确圆心// 向量OA和OB的叉积doublecross1=(A.x-center1.x)*(B.y-center1.y)-(A.y-center1.y)*(B.x-center1.x);doublecross2=(A.x-center2.x)*(B.y-center2.y)-(A.y-center2.y)*(B.x-center2.x);// 根据旋转方向和叉积符号选择正确圆心// 对于标准坐标系:正旋转(逆时针)对应正的叉积if((theta>0&&cross1>0)||(theta<0&&cross1<0)){returncenter1;}else{returncenter2;}}// 验证结果的辅助函数voidverifyResult(constPoint&A,constPoint&B,constPoint&O,doubleexpectedTheta){// 计算向量OA和OBdoubleOA_x=A.x-O.x;doubleOA_y=A.y-O.y;doubleOB_x=B.x-O.x;doubleOB_y=B.y-O.y;// 计算当前角度doublecurrentTheta=atan2(OB_y,OB_x)-atan2(OA_y,OA_x);// 规范化角度到[-π, π]while(currentTheta>M_PI)currentTheta-=2*M_PI;while(currentTheta<-M_PI)currentTheta+=2*M_PI;cout<<"验证结果:"<<endl;cout<<"- 实际旋转角度: "<<currentTheta<<" 弧度"<<endl;cout<<"- 期望旋转角度: "<<expectedTheta<<" 弧度"<<endl;cout<<"- 角度误差: "<<fabs(currentTheta-expectedTheta)<<" 弧度"<<endl;// 检查半径一致性doublerA=distance(O,A);doublerB=distance(O,B);cout<<"- 半径 |OA| = "<<rA<<endl;cout<<"- 半径 |OB| = "<<rB<<endl;cout<<"- 半径差: "<<fabs(rA-rB)<<endl;}intmain(){Point A,B;doubletheta;cout<<"========================================"<<endl;cout<<" 根据旋转前后点求圆心坐标"<<endl;cout<<"========================================"<<endl;cout<<endl;// 输入数据cout<<"请输入点A的坐标 (x1 y1): ";cin>>A.x>>A