Линейка в 3д нахер

Sovka Ivanov
5 min readJul 17, 2018

--

линейка — линейная алгебра.

Ниже скрин четырёхмерного куба, я захерачил его в синьке через питон. И это охуеть как просто, ща всё объясню. И даже проект выложу и ещё чото выложу.

в сложнонародье тессеракт

Начать надо с вектора, ибо он есть начало начал, праотец, протосущность. Даже в начале был не ноль, а нулевой вектор. На колени будьте добры.

Вектор — набор чисел, над которым доступна операция сложения и умножения на число.

Набор чисел, а не направленный в жопу отрезок. Примеры:

{2, 15, 1.5};

{1};

{2.5, 1, 1, 1, 0, 2}.

Просто наборы чисел. Их можно складывать и умножать на число, это тоже очень просто, вот примеры:

{1 ,2} * 3 = {3, 6};

{1.5, 20, 40} + {1.5, 20, 0} = {3, 40, 40}.

Просто складывай да умножай, хуль тут непонятного. Про сложение разномерных векторов (напр. {1, 2} + {1, 2, 3}) чуть дальше расскажу, пока что можно думать, что так нельзя или можно. Хотя давай щас расскажу, вот так это делается:

{1, 2} + {1, 2, 3} = {1, 2, 0} + {1, 2, 3},

т.е. {x} = {x, 0} = {x, 0, 0} =…нутыпонел.

А позже сам поймёшь почему.

Направленный отрезок — это лишь геометрическое представление, удобное для визуализации и интуитивного понимания (в школе), но линейка — это не про интуитивные понимания, а про решение геометрических задач алгебраическими методами, т.е. абстрагирование от визуализации. И от отрезков. И это круто как раз для всяких 3Д приложух, ибо в компе нету геометрического пространства, есть только числа, повсюду ебучие числа.

А теперь можно взять несколько векторов, и с их помощью описать всё пространство везде. Сначала одномерное. Берёшь любой одномерный вектор ({1} или {.00001} или {1125.45} — похер вообще) и обозначаешь какой-нить буковкой, у меня i = {1} . Типа это твоя константа нахер. И всё, любой вектор одномерного пространства можно описать через i.

{135} = 135 * i;

{-0.5} = -0.5 * i

Теперь двумерность! Так же взял один вектор, и какой-нибудь ещё, который нельзя описать с помощью первого. И вот они двое:

i1 = {1, 0} и i2 ={0, 1}.

У этих векторов длина 1, они перпендикулярны друг другу, значит всё заебись, они составляют базис пространства. С помощью суммы их двоих умноженных на числа можно описать любой двумерный вектор:

{2, -5} = 2 * i1+ (-5) * i2;

{125.1, 0} = 125.1 * i1 + 0 * i2

Наверняка ты уже вдуплил, что делать вектора единичными и ортогональными мегаудобно. Смотри базис четырёхмерного пространства например:

{1, 0, 0, 0}, {0, 1, 0, 0},{0, 0, 1, 0},{0, 0, 0, 1}

“Да такого пространства не бывает, ты мне втираешь какую-то дичь” — насрать вообще бывает такое или нет, его можно описать математически, значит с ним можно работать и делать кое-что получше — симульнуть на компе. Ну разве это не охуительно?

Далее пойдёт настолько размытое объяснение, что почти антинаучное.

С векторами ясн, теперь матрицы. Вон тот 4мерный базис в столбик запиши.

1 0 0 0

0 1 0 0

0 0 1 0

0 0 0 1

С матрицами оказалось очень просто, правда? Нет, их ещё надо умножать. Для начала можно прибавить к каждому вектору другой вектор, получится так:

Можно сказать, что это некоторое преобразование пространства, типа сдвиг. Ещё можно умножить каждый вектор на число.

Даже под хмурым ясно, что это масштабирование. Некоторые оси сожмутся, некоторые наоборот.

С поворотом есть проблемы, тут надо поюзать синусы и косинусы. Это вообще целое искусство нахрен, я про него аж отдельную статейку накатал. Прочти её сразу же после этой или хотя бы в один день с этой.

Кстати отсюда идёт логичное следствие, что матрицы некоммутативны (A * B ≠ B * A), ибо первая матрица — исходный базис, а вторая — преобразование этого исходного.

Теперь можно перебраться в какой-нибудь 3Дсофт и с чем-нибудь там разобраться, например с наследованием (не программирование). Это типа когда один геометрический объект делаешь дочкой другого. И когда вращаешь перемещаешь родителя — с дочкой происходит то же самое. Я это буду в синьке демонстрировать, погнали.

У каждого объекта есть своё локальное пространство, описанное матрицей. В этом пространстве находятся все точки-полики-говно. Когда объект двигаешь, крутишь или масштабируешь — все эти изменения касаются именно его локального пространства, но т.к. объект (точки-полики) находится в нём, то изменятся вместе с ним (всё в порядке, я капитан). Когда придочериваешь к одному объекту другой — тот внезапно начинает находиться в пространстве первого, т.е. его базис становится преобразован базисом первого. Значит чо? Значит матрица дочки становится умноженной на матрицу батьки. На гифке практика.

инцест жесть смотреть онлайн

И в общем-то так вот всё это и происходит, перемещения-хуения всякие. Кстати я забыл упомянуть, что каждая точка геометрии по сути является вектором — набором своих координат. В данном случае координаты 3, значит 3мерным вектором. Но никто ж не запрещает добавить четвёртую координату к вектору и четвёртый вектор к матрице? Да даже если и запрещает — мне похуй, я добавил. Написал на питоне классы 4мерных вектора и матрицы, прописал все правила умножений и говнений, и спроецировал это всё в родное 3мерное пространство синьки.

в четырёхмерке вращения идут вокруг 2д плоскостей, вот ход размышлений. В 1мерном вращения нету, в 2мерном вращение вокруг точки (нольмерность), в 3д вокруг оси (одномерность), дальше сам считай.

Осторожно, петонъ.

Самый годный учебник линейки из всех двух, которые я читал. Тут всё объяснено исторически, без вот этого: “матрица набор чисел, умножается ебануто. Почему? Нахуй иди, вот почему”, что весьма облегчает понимание и избавляет от зубрёжки. С практическими задачками естессн, которые гораздо интереснее делать в каком-нибудь 3Дсофте. Изучай на здоровье:

нанах

Вот к примеру задачка из самого начала, решённая в синьке — проекция точки на плоскость, проходящую через три точки. Т.е. тремя точками задана плоскость, и на эту плоскость опущена вертикаль из ещё какой-то левой точки.

чёрная линия всегда перпендикулярна бесконечной плоскости, заданной белым треугольником.

проектик

я

Я объяснил всё крайне грубо. Это неизбежная побочка популярно понятного объяснения. Вот и всё ебать.

--

--

Sovka Ivanov

Папкин математик, мамкин программист, дизайнер папиной подруги.