Это - объяснение высокого уровня. Я попытаюсь совершенствовать их:
Хеширование - в идеальном мире, это - случайный оракул. Для того же входа X, Вы всегда получаете тот же вывод Y, который никоим образом не связан с X. Это математически невозможно (или по крайней мере бездоказательно, чтобы быть возможным). Самыми близкими, которые мы получаем, являются функции лазейки. H (X) = Y для с H-1 (Y) = X является настолько трудным сделать, Вы - более обеспеченная попытка к грубой силе Z, таким образом, что H (Z) = путаница Y
(мое мнение) - Любая функция f, такой, что f (a) = b, где Вы полагаетесь на f быть секретным. F может быть хеш-функцией, но часть "путаницы" подразумевает безопасность через мрак. Если бы Вы никогда не видели ROT13 прежде, это была бы путаница
Шифрование - Ek(X) = Y, Делавэр (Y) = X, где E известен всем. k и l являются ключами, они могут быть тем же (в симметричном, они - то же). Y является шифрованным текстом, X простой текст.
Я предполагаю, что вы говорите здесь о 2D. Матрица аффинного преобразования имеет 9 значений:
| a1 a2 a3 | A = | a4 a5 a6 | | a7 a8 a9 |
Есть 3 входных вершины x1
, x2
и x3
, которые при преобразовании должны стать ] y1
, y2
, y3
. Однако, поскольку мы работаем в однородных координатах, применение A
к x1
не обязательно дает y1
- оно дает кратное y1
. Итак, у нас также есть неизвестные множители k1
, k2
и k3
с уравнениями:
A*x1 = k1*y1 A*x2 = k2*y2 A*x3 = k3*y3
Каждый из них является вектором, поэтому мы действительно имеет 9 уравнений с 12 неизвестными, поэтому решение будет недостаточно ограниченным. Если мы потребуем, чтобы a7 = 0
, a8 = 0
и a9 = 1
, тогда решение будет уникальным (этот выбор естественный, поскольку он означает, что если входная точка равна ( x
, y
, 1), то выходная точка всегда будет иметь однородную координату 1, поэтому результирующее преобразование представляет собой просто преобразование 2x2 плюс перенос).
Следовательно, это сводит уравнения к:
a1*x11 + a2*x12 + a3 = k1*y11 a4*x11 + a5*x12 + a6 = k1*y12 1 = k1 a1*x21 + a2*x22 + a3 = k2*y21 a4*x21 + a5*x22 + a6 = k2*y22 1 = k2 a1*x31 + a2*x32 + a3 = k3*y31 a4*x31 + a5*x32 + a6 = k3*y32 1 = k3
Итак, k1
= k2
= k3
= 1. Их подключение и преобразование в матричную форму дает:
| x11 x12 1 0 0 0 | | a1 | | y11 | | x21 x22 1 0 0 0 | | a2 | | y21 | | x31 x32 1 0 0 0 | * | a3 | = | y31 | | 0 0 0 x11 x12 1 | | a4 | | y12 | | 0 0 0 x21 x22 1 | | a5 | | y22 | | 0 0 0 x31 x32 1 | | a6 | | y32 |
Решение этой системы уравнений 6x6 дает вам Матрица аффинного преобразования A
. У него будет уникальное решение тогда и только тогда, когда 3 точки исходного треугольника не лежат на одной прямой.
x
, y
, 1), то выходная точка всегда будет иметь однородную координату 1, поэтому результирующее преобразование будет просто преобразованием 2x2 плюс перевод).
Следовательно, это сводит уравнения к:
a1*x11 + a2*x12 + a3 = k1*y11 a4*x11 + a5*x12 + a6 = k1*y12 1 = k1 a1*x21 + a2*x22 + a3 = k2*y21 a4*x21 + a5*x22 + a6 = k2*y22 1 = k2 a1*x31 + a2*x32 + a3 = k3*y31 a4*x31 + a5*x32 + a6 = k3*y32 1 = k3
Итак, k1
= k2
= k3
= 1. Подсоединение их и преобразование к матричной форме дает:
| x11 x12 1 0 0 0 | | a1 | | y11 | | x21 x22 1 0 0 0 | | a2 | | y21 | | x31 x32 1 0 0 0 | * | a3 | = | y31 | | 0 0 0 x11 x12 1 | | a4 | | y12 | | 0 0 0 x21 x22 1 | | a5 | | y22 | | 0 0 0 x31 x32 1 | | a6 | | y32 |
Решение этой системы уравнений 6x6 дает вам матрицу аффинного преобразования A
. У него будет уникальное решение тогда и только тогда, когда 3 точки исходного треугольника не лежат на одной прямой.
x
, y
, 1), то выходная точка всегда будет иметь однородную координату 1, поэтому результирующее преобразование будет просто преобразованием 2x2 плюс перевод).
Следовательно, это сводит уравнения к:
a1*x11 + a2*x12 + a3 = k1*y11 a4*x11 + a5*x12 + a6 = k1*y12 1 = k1 a1*x21 + a2*x22 + a3 = k2*y21 a4*x21 + a5*x22 + a6 = k2*y22 1 = k2 a1*x31 + a2*x32 + a3 = k3*y31 a4*x31 + a5*x32 + a6 = k3*y32 1 = k3
Итак, k1
= k2
= k3
= 1. Подсоединение их и преобразование к матричной форме дает:
| x11 x12 1 0 0 0 | | a1 | | y11 | | x21 x22 1 0 0 0 | | a2 | | y21 | | x31 x32 1 0 0 0 | * | a3 | = | y31 | | 0 0 0 x11 x12 1 | | a4 | | y12 | | 0 0 0 x21 x22 1 | | a5 | | y22 | | 0 0 0 x31 x32 1 | | a6 | | y32 |
Решение этой системы уравнений 6x6 дает вам матрицу аффинного преобразования A
. У него будет уникальное решение тогда и только тогда, когда 3 точки исходного треугольника не лежат на одной прямой.
a1*x11 + a2*x12 + a3 = k1*y11 a4*x11 + a5*x12 + a6 = k1*y12 1 = k1 a1*x21 + a2*x22 + a3 = k2*y21 a4*x21 + a5*x22 + a6 = k2*y22 1 = k2 a1*x31 + a2*x32 + a3 = k3*y31 a4*x31 + a5*x32 + a6 = k3*y32 1 = k3
Итак, k1
= k2
= k3
= 1. Их подключение и преобразование в матричную форму дает:
| x11 x12 1 0 0 0 | | a1 | | y11 | | x21 x22 1 0 0 0 | | a2 | | y21 | | x31 x32 1 0 0 0 | * | a3 | = | y31 | | 0 0 0 x11 x12 1 | | a4 | | y12 | | 0 0 0 x21 x22 1 | | a5 | | y22 | | 0 0 0 x31 x32 1 | | a6 | | y32 |
Решение этой системы уравнений 6x6 дает вам матрицу аффинного преобразования A
. У него будет уникальное решение тогда и только тогда, когда 3 точки исходного треугольника не лежат на одной прямой.
a1*x11 + a2*x12 + a3 = k1*y11 a4*x11 + a5*x12 + a6 = k1*y12 1 = k1 a1*x21 + a2*x22 + a3 = k2*y21 a4*x21 + a5*x22 + a6 = k2*y22 1 = k2 a1*x31 + a2*x32 + a3 = k3*y31 a4*x31 + a5*x32 + a6 = k3*y32 1 = k3
Итак, k1
= k2
= k3
= 1. Их подключение и преобразование в матричную форму дает:
| x11 x12 1 0 0 0 | | a1 | | y11 | | x21 x22 1 0 0 0 | | a2 | | y21 | | x31 x32 1 0 0 0 | * | a3 | = | y31 | | 0 0 0 x11 x12 1 | | a4 | | y12 | | 0 0 0 x21 x22 1 | | a5 | | y22 | | 0 0 0 x31 x32 1 | | a6 | | y32 |
Решение этой системы уравнений 6x6 дает вам матрицу аффинного преобразования A
. У него будет уникальное решение тогда и только тогда, когда 3 точки исходного треугольника не лежат на одной прямой.
Привет, ребята, без потери общности , сделайте так, чтобы два треугольника имели начало координат как одну вершину (вы можете добавить аффинный сдвиг позже), чтобы они определялись точками 0, a, b, c, d , затем умножьте свои точки x матрицей NM
, где
M = инверсия ( ab ) <--- это матрица 2x2 с точками a и ] b в качестве столбцов
и
N = ( cd )
Это должно сработать.
Если я правильно понимаю, ваши треугольники имеют одинаковый размер и углы, поэтому вы должны иметь возможность преобразовать их так, чтобы они имели (по крайней мере) одну точку в общий. После этого они должны отличаться только вращением или могут быть отражены, так что вы можете увидеть углы между линиями треугольников и попробовать их для вращения, и могли бы отразить один из треугольников, если ни один из углов не работает.
РЕДАКТИРОВАТЬ: ОК , этого недостаточно, аффинные преобразования также могут содержать сдвиг и масштабирование ... Масштабирование можно легко выполнить, просто разделите длину линий, это также даст вам некоторую информацию о соответствующих линиях треугольников, но сдвиг будет сложнее. ..
OTOH, не могли бы вы просто решить для этого какую-нибудь систему уравнений? Ведь там должна быть матрица трансформации и 3 точки (новая и старая) ...
Просто сформулируйте задачу в виде набора уравнений и затем решите ее:
P1 * M = P1'
P2 * M = P2'
P3 * M = P3'
M
- это матрица 3x3, например:
[m00, m01, m02;
m10, m11, m12;
0 , 0, 1]
И P_i
- это матрица кортеж [k * x_i, k * y_i, k]
(однородные координаты) ...
Теперь вы можете попытаться расширить 3 матричных уравнения, показанных выше, и создать новую систему с m_ij
как не распознает и решает его, но если я чего-то не упускаю (а, может быть, и пропускаю), вам нужно на один балл больше, чтобы полностью указать преобразование, иначе вы получите дополнительную степень свободы (и конечно вы можете это исправить).