Преобразуйте треугольник к другому треугольнику

Это - объяснение высокого уровня. Я попытаюсь совершенствовать их:

Хеширование - в идеальном мире, это - случайный оракул. Для того же входа 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 простой текст.

14
задан Savvas Dalkitsis 11 July 2009 в 19:06
поделиться

4 ответа

Я предполагаю, что вы говорите здесь о 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 точки исходного треугольника не лежат на одной прямой.

13
ответ дан 1 December 2019 в 13:47
поделиться

Привет, ребята, без потери общности , сделайте так, чтобы два треугольника имели начало координат как одну вершину (вы можете добавить аффинный сдвиг позже), чтобы они определялись точками 0, a, b, c, d , затем умножьте свои точки x матрицей NM

, где

M = инверсия ( ab ) <--- это матрица 2x2 с точками a и ] b в качестве столбцов

и

N = ( cd )

Это должно сработать.

2
ответ дан 1 December 2019 в 13:47
поделиться

Если я правильно понимаю, ваши треугольники имеют одинаковый размер и углы, поэтому вы должны иметь возможность преобразовать их так, чтобы они имели (по крайней мере) одну точку в общий. После этого они должны отличаться только вращением или могут быть отражены, так что вы можете увидеть углы между линиями треугольников и попробовать их для вращения, и могли бы отразить один из треугольников, если ни один из углов не работает.

РЕДАКТИРОВАТЬ: ОК , этого недостаточно, аффинные преобразования также могут содержать сдвиг и масштабирование ... Масштабирование можно легко выполнить, просто разделите длину линий, это также даст вам некоторую информацию о соответствующих линиях треугольников, но сдвиг будет сложнее. ..

OTOH, не могли бы вы просто решить для этого какую-нибудь систему уравнений? Ведь там должна быть матрица трансформации и 3 точки (новая и старая) ...

1
ответ дан 1 December 2019 в 13:47
поделиться

Просто сформулируйте задачу в виде набора уравнений и затем решите ее:

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 как не распознает и решает его, но если я чего-то не упускаю (а, может быть, и пропускаю), вам нужно на один балл больше, чтобы полностью указать преобразование, иначе вы получите дополнительную степень свободы (и конечно вы можете это исправить).

1
ответ дан 1 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: