Как отмечает James Large в комментарии, вы можете сделать это эффективно, используя матрицу преобразования. Ваша трансформация потребует масштабирования, вращения и перевода, каждый из которых может быть представлен матрицей, и вы можете построить единую матрицу преобразования, которая делает все это сразу из простых преобразований просто путем умножения матриц, представляющих каждое преобразование вместе используя матричное умножение.
Вы можете достичь того, чего хотите, сначала переведя точки так, чтобы первая точка находилась в начале координат (потому что это точка, которую вы хотите вращать), затем применяя поворот, масштабирующее преобразование, а затем второй перевод, что первая точка находится в точке x1, y1.
Угол поворота может быть вычислена путем вычисления разности между углом между (x1, y1) - (x2, y2), а угол между исходными начальными и конечными точками:
double rotationAngle = atan2(y2-y1, x2-x1) -
atan2(Points[Points.length-1].y-Points[0].y, Points[Points.length-1].x-Points[0].x);
Коэффициент масштабирования - расстояние между (x1, y1) - (x2, y2), деленное на расстояние между нетрансформированным начальным и конечным точками.
Так что ваша трансформация может быть построена следующим образом:
- перевести на (-точках [0] .x, -точках [0] .y)
- вращение rotationAngle
- масштаба путем масштабирования фактор
- перевести на (x1, y1)
порядок поворота и масштабирования можно поменять местами, это не имеет значения. См. Статью transformation matrices о том, как построить каждый.
Вы также можете решить с помощью одновременных уравнений, но я думаю, что этот способ более интуитивно понятен. В итоге вы получите одну и ту же матрицу, чтобы преобразование по каждой точке было столь же эффективным.
Вы не собираетесь делать это эффективно, не изучая математику. Вы хотите вычислить матрицу _transform_, а затем применить это преобразование к каждой из рассматриваемых точек. Вам, вероятно, понадобится решить некоторую систему линейных уравнений, чтобы вычислить матрицу. Статья в Википедии дает вам представление об этом, но лучший учебник по компьютерной графике - лучшее место для начала. https://en.wikipedia.org/wiki/Transformation_matrix –