Seeking arc center coordinates

      double x1 = position1_x;
      double y1 = position1_y;
      double x2 = position2_x;
      double y2 = position2_y;
      double dy = y2 - y1;
      double dx = x2 - x1;

      double length = sqrt(pow(dx , 2) + pow(dy , 2));
      if(length > 2 * radius)
      {
        ERROR("Radius is too little : %f , l: %f", radius, length);
      }
      double alpha = angles::normalize_angle(2 * asin((length/2.0)/radius));
      double theta1 = (M_PI - alpha) / 2.0;
      double theta2 = atan2(dy, dx);
      double theta3 ;
      if(is_clock_wise == 1)
      {
        theta3 = theta2 - theta1;
      }
      else if(is_clock_wise == 2)
      {
        theta3 = theta2 + theta1;
      }
      else
      {
        ERROR("circle clock wise error!");
      }

      double x_c = x1 + radius * cos(theta3);
      double y_c = y1 + radius * sin(theta3);

 Known radius and the circular arc direction (counterclockwise cis)

Guess you like

Origin www.cnblogs.com/mowangaxing/p/11205219.html
arc