Тот компонент перевода помогает Вам путем создания ортонормированное основание "глазом" в источнике и всем остальном выраженном с точки зрения того источника ("глаз") и эти три оси.
понятие не так, что матрица корректирует положение камеры. Скорее это пытается упростить математику: когда Вы хотите представить изображение всего, что Вы видите от своего "глазного" положения, является самым легким притвориться, что Ваш глаз является центром вселенной.
Так, короткий ответ - то, что это делает математику намного легче.
Ответ на вопрос в комментарии: причина Вы только вычитаете "глазное" положение из всего, имеет отношение к порядку операций. Думайте о нем этот путь: как только Вы находитесь в новой системе отсчета (т.е. положение головы, представленное xaxis, yaxis и zaxis), Вы теперь хотите выразить расстояния с точки зрения этой новой (повернутой) системы отсчета. Именно поэтому Вы используете скалярное произведение новых осей с позицией наблюдателя: это представляет то же расстояние, которое должны переместить вещи, но оно использует новую систему координат.
Пожалуйста, посмотрите на использование стандартных библиотек для этого:
Просто используйте критерий.
Замечание о глубине оценки : лень означает, что вам нужно решить, какой объем оценки вы хотите получить во время хронометража. Обычно вам нужно привести код к нормальной форме. Класс типов NFData позволяет сделать это с помощью метода rnf. Если вычисление внешнего конструктора в порядке, используйте seq
в чистом коде, чтобы принудительно выполнить его вычисление.
Lazy значит Lazy. Время имеет значение только внутри монады, такой как IO.
Время не имеет никакого значения в выражении "4 + 4" - или в любом другом математическом уравнении. Ответ просто ЕСТЬ. Ответ" на любое другое чистое вычисление уже предопределен в тот момент, когда вычисление задано.
К сожалению, это и есть "ответ" на ваш вопрос. Ответ, который, на самом деле, существовал еще до того, как вы задали свой вопрос. Он существовал в 1998 году, когда язык был окончательно определен. Тот факт, что мне потребовался год, чтобы написать это, не имеет значения ;-)
Ладно, хватит этой ерунды. (Но если все вышесказанное слишком раздражает, то просто забудьте о Haskell.)
Если пакет Criterion - это слишком больно, просто напишите тестовый пример и используйте +RTS для его тестирования.
Если вы хотите быть действительно крутым, создайте свою собственную монаду - такую, которая засекает время выполнения вашего алгоритма и передает результат обратно в виде кортежа с возвращаемым значением алгоритма. Удачи. Мы все рассчитываем на вас!