//*********************************************圆弧数据离散密化***********************************************************
/*求解的步骤:
1.求解圆心
2.求起点对应性的起点与终点
3.求解每步的起点
4.
*/
//圆弧相关参数
double R=5;
double error_R=0.01;
double start_x=1;
double start_y=6;
double end_x=6;
double end_y=1;
/*给定空间三角形的三个顶点(a, b, c),把这三个顶点的x, y, z分量组成一个3X3的矩阵(行矩阵与列矩阵都行,因为它们的det相等),然后计算出这个矩阵的det值。
如果 det > 0, 表示这三点是逆时针方向;
如果 det = 0, 表示这三点共线;
如果 det < 0, 表示这三点呈顺时针方向。
*/
//Circle_Center 见https://blog.csdn.net/weixin_39752599/article/details/83042071
Circle_Center(start_x,start_y,end_x,end_y,R);
double center_x;
double center_y;
//ccw见https://blog.csdn.net/weixin_39752599/article/details/83042071
double f=ccw(start_x,start_y,end_x,end_y,center_x_1,center_y_1) ;
if(f>0){
center_x=center_x_2;
center_y=center_y_2;
}
else{
center_x=center_x_1;
center_y=center_y_1;
}
double step_angle=atan2(sqrt(R*R-(R-error)*(R-error)),R-error);
double angle_start=atan2(start_y-center_y ,start_x-center_x);
double angle_end=atan2(end_y-center_y ,end_x-center_x);
double angle=angle_end-angle_start;
double angle_nums=ceil(abs(angle)/step_angle);
step_angle=angle/angle_nums;
remove("circle.txt");
std::ofstream out2("circle.txt",std::ios::app);
if (!outf)
{
std::cout<<"can not open circle.txt file "<<std::endl;
return 0;
}
double distance1=(center_x_1-start_x)*(center_x_1-start_x)+(center_y_1-start_y)*(center_y_1-start_y);
double distance2=(center_x_2-start_x)*(center_x_2-start_x)+(center_y_2-start_y)*(center_y_2-start_y);
double zz;
double circle_piont[2]={0};
for(int i= 0;i<=angle_nums;i++){
circle_piont[0]= R*cos(angle_start+i*step_angle)+center_x;
circle_piont[1]= R*sin(angle_start+i*step_angle)+center_y;
out2<<circle_piont[0]<<" "<<circle_piont[1]<<std::endl;
zz= i*step_angle;
}
out2.close();