using System;
public class CoordinateRotation
{
public static (double x1, double y1) Rotate(double x0, double y0, double degree, double refX = 0.0, double refY = 0.0)
{
double beta = degree * Math.PI / 180;
double cosBeta = Math.Cos(beta);
double sinBeta = Math.Sin(beta);
double x1 = (x0 - refX) * cosBeta - (y0 - refY) * sinBeta + refX;
double y1 = (x0 - refX) * sinBeta + (y0 - refY) * cosBeta + refY;
return (x1, y1);
}
}
class Program
{
static void Main()
{
var result = CoordinateRotation.Rotate(1, 1, 90);
Console.WriteLine($"旋转后的坐标: ({result.x1}, {result.y1})");
var result2 = CoordinateRotation.Rotate(2, 3, 45, 1, 1);
Console.WriteLine($"旋转后的坐标: ({result2.x1}, {result2.y1})");
}
}

using System;
public class RotationCenterSolver
{
public static (double xc, double yc) SolveRotationCenter(double x1, double y1, double x2, double y2, double degree)
{
double theta = degree * Math.PI / 180;
double cosTheta = Math.Cos(theta);
double sinTheta = Math.Sin(theta);
double a11 = 1 - cosTheta;
double a12 = sinTheta;
double a21 = -sinTheta;
double a22 = 1 - cosTheta;
double b1 = x1 * cosTheta - y1 * sinTheta - x2;
double b2 = x1 * sinTheta + y1 * cosTheta - y2;
double determinant = a11 * a22 - a12 * a21;
if (Math.Abs(determinant) < 1e-10)
{
throw new InvalidOperationException("无解或无穷多解,可能旋转角度为 0 或 360 度。");
}
double xc = (a22 * b1 - a12 * b2) / determinant;
double yc = (-a21 * b1 + a11 * b2) / determinant;
return (xc, yc);
}
}
class Program
{
static void Main()
{
var result = RotationCenterSolver.SolveRotationCenter(1, 1, -1, 1, 90);
Console.WriteLine($"旋转参考点: ({result.xc}, {result.yc})");
var result2 = RotationCenterSolver.SolveRotationCenter(2, 3, 0.707, 2.414, 45);
Console.WriteLine($"旋转参考点: ({result2.xc}, {result2.yc})");
}
}
