Пусть c(0), c(1), c(2), c(3)
будет четырьмя углами C
, и пусть b(0)
будет углом B, в котором расположена система координат B. Пусть q
будет углом поворота оси x B. Все эти углы и точки должны быть заданы в одной системе координат.
Чтобы найти координаты c(i)
в B, поверните вектор c(i) - b(0)
на угол q
(или -q
в зависимости от того, как измеряются вещи). Вы можете использовать матрицу вращения для этого. Пусть cq = cos(q)
, sq = sin(q)
и (dx, dy) = c(i) - b(0)
. Тогда координаты c(i)
в B равны
Пусть c = (c(0) + c(2)) / 2
будет центром C. Пусть S(s)
будет матрицей, которая масштабируется на s
, и пусть R(q)
будет матрицей, которая вращается на q
. Углы B задаются как
b(i) = c + S(s) * R(q) * (c(i) - c)
Углы a(0), a(1), a(2), a(3)
прямоугольника A также известны. Мы хотим определить максимально возможное значение параметра масштабирования s
, чтобы все точки b(i)
из B находились в прямоугольнике A.
Я думаю, что самый безопасный и простой подход здесь - рассмотреть соответствующие пары b(i)
и a(i)
, и для таких пар вычислить наибольшее значение s(i, j)
, так что если s = s(i, j)
, то b(i)
находится в угловой области a(j)
.
Пусть a(0)
и a(2)
будут противоположными углами A, и пусть c(0)
и c(1)
будут смежными углами C. Пусть r(j) = a(j) - c
и d(i) = R(q) * (c(i) - c)
.
Каждая диагональ i
может быть масштабирована на
s(i, j) = min (|r(j).x| / |d(i).x|, |r(j).y| / |d(i).y|)
до того, как B выйдет за пределы области, определенной r(j)
. Вычислите s(i, j)
для i = 0, 1
и j = 0, 2
и пусть s
будет минимумом из этих 4 значений.
В зависимости от того, как измеряется q
, может потребоваться применить преобразование q' = atan2(kx * sin(q), ky * cos(q))
к q
, чтобы учесть проблемы с соотношением сторон.