Ну, у Мартина я цитирую то, с чем согласен. Проблема в том, что часто те правила, которые приводят «классики», не имеют под собой каких-то ясных объяснений. Я попытался эти правила найти. Цитата, которую вы приводите характерна тем, что в ней автор оперирует такими понятиями как «любимый», то есть он априори говорит лишь о субъективной составляющей, и оставляет в стороне объективные критерии удобочитаемости.
По поводу скобок, если они стоят на своем месте, то есть не вызывают затруднений при чтении и формируют корректную визуальную структуру, то удивления вызывать они не будут. Почему они должны вызывать у вас удивления, если вы готовы к тому, что в ваших правилах есть известные исключения? Расстановка же по жесткому правилу, которое принципиально не способно учесть весь контекст текста, всегда в большей (для 1TBS ) или меньшей (для Allman ) степени будет приводить к неудовлетворительному результату.
Соглашения должны быть, но формироваться они должны на основе понимания того, почему мы объективно должны делать так, а не иначе, а не по праву первого или в результате простого следования тому, что пишут «классики».
При отделении названия функции пробелом её название начинает восприниматься как переменная в математическм выражении.
Я бы прокомментировал это так: этап выделения и чтения идентификаторов находится на более низком уровне, по сравнению с этапом определения их роли, то есть разбора синтаксического выражения. Первый этап явно выигрывает от наличия пробелов, и это определяется нашими психо-физическими особенностями восприятия (т.е. не может быть изменено). То, как интерпретируется выражение, это результат научения и выработанной привычки, и, следовательно, может быть изменено. Мы можем привыкнуть легко читать тексты программ, написанные на разных языках программирования, но отсутствие явного разделения между идентификаторами всегда будет требовать больших ментальных усилий.
Все это бессмысленная дискуссия: было ли крепостничество рабством или нет.
Принципиальный вопрос в том, что в английском языке закреплена ассоциация «славяне – рабы». А потому пусть каются.)
Интересная статья. Спасибо. Все в точку. По поводу ошибки в оценки сроков. Думаю, надо просто понимать, что такая ошибка это объективное условие разработки. Оценивая сроки, в 90% случаев вы ошибетесь, поэтому планировать надо исходя из этого.
Идея приложения тоже очень интересная. А как вы планировали идентифицировать пользователей, если это не секрет?
Да, возможно это "особенности" майи. То есть, они могут формировать локальную и глобальную матрицы (независимо от того какой у них там порядок: TSR, SRT) как для умножения справа, но результирующую матрицу формировать для умножения слева, транспонируя глобальную и локальную матрицы.
(Продолжение, опять не на ту клавишу нажал.)
По поводу неразрешимости задачи декомпозиции в общем случае для 3D сказать сразу ничего не могу. Но как мы видим для случая 2D он не прав.
В статьях его еще меня смутило то, что он вроде бы использует умножение справа, как и у меня, но в случае иерархии объектов сначала применяет матрицу трансформации родительского объекта (глобальную), а не локальную. Это странно. Например, у меня есть квадрат, растянутый в прямоугольник преобразованием масштабирования по оси Y. Он является частью вращающегося объекта. Кажется очевидным, что для того чтобы получить вращающийся прямоугольник, который сохраняет свою геометрию, надо сначала растянуть квадрат и только потом вращать, а не наоборот.
За ссылку спасибо. Почитал. Есть интересные моменты, но про то, что там "за матрицы таки все", это вы погорячились. :)
Technically its impossible to extract scale and rotation from a general transformation matrix, but in reality its generally easy. What does this mean? Well basically a general transformation matrix can have shear as well as scale as well as rotation. And all three of these pieces of data live in the upper 3×3 quadrant of the matrix. But if you know you’re just working with rotations, translations and scale (which in my professional life has always been the case – but perhaps others have different stories?) then its possible and in fact pretty easy.
Человек пишет, фактически, что в общем случае задача декомпозиции неразрешима и рассматривает один отдельный случай, в котором отсутствуют преобразования сдвига и порядок применения матриц известен.
А, вы имеет в виду, что я поместил в хаб Программирование и не привел примера ее реализации? Понятно. Ну я в этот хаб поместил, потому, что эта задача имеет очевидное отношение к программированию, а не потому что, я много и упорно программировал, пытаясь ее решить. Очевидно, что реализация этого алгоритма элементарна. По этой причине я и не стал приводить ее.
На серьезное достижение я не претендую, что вы. Достижение не у меня, а в статье, на которую я ссылаюсь. Я всего лишь вытащил из нее то, что непосредственно требуется для решения поставленной задачи, добавил отсутствующие компоненты и опубликовал здесь в надежде на то, что это может пригодиться еще кому-нибудь. Потому что, это теперь статья Путятина у меня в Гугле выскакивает на первой странице, а когда я искал соответствующую информацию то ли год, то ли полгода назад, как-то ничего не попадалось. То ли я запрос по другому составил, то ли в Гугле что-то подкрутили, или может этой статьи там тогда и не было добавлено. Не знаю.
Кроме того, в статье на которую я ссылаюсь, судя по виду матрицы поворота, также умножение справа.
По поводу формул, спасибо вам за картинки. Пусть они будут здесь. Но, мне все-таки мой вариант нравится больше, за исключением того, что из-за увеличенного интервала между строк разбился "ASCII art" для скобок вокруг матриц. Интересно, можно ли этот интервал локально убрать? А нравится мне мой вариант больше, потому что визуально большой разницы нет (по-крайней мере не для математика), а поскольку это не картинки а текст, его можно просто скопировать и куда-то вставить, например себе в комментарии в код.
Если рассматривать это как систему уравнений в которой мы умножаем перпеменные координаты точки на коэффициеты матриы преобразования, то, наверно, вариант с вектором-столбцом действительно смотрится логичнее. По поводу транспонирования это сюда: Quartz 2D Programming Guide: The Math Behind the Matrices. Поскольку это все делалось под Мак. Лично я ничего криминального в умножении справа не вижу.
Не понимаю, что сравнить, но если выбрать из того, что есть, то последний.
Ну, у Мартина я цитирую то, с чем согласен. Проблема в том, что часто те правила, которые приводят «классики», не имеют под собой каких-то ясных объяснений. Я попытался эти правила найти. Цитата, которую вы приводите характерна тем, что в ней автор оперирует такими понятиями как «любимый», то есть он априори говорит лишь о субъективной составляющей, и оставляет в стороне объективные критерии удобочитаемости.
По поводу скобок, если они стоят на своем месте, то есть не вызывают затруднений при чтении и формируют корректную визуальную структуру, то удивления вызывать они не будут. Почему они должны вызывать у вас удивления, если вы готовы к тому, что в ваших правилах есть известные исключения? Расстановка же по жесткому правилу, которое принципиально не способно учесть весь контекст текста, всегда в большей (для 1TBS ) или меньшей (для Allman ) степени будет приводить к неудовлетворительному результату.
Соглашения должны быть, но формироваться они должны на основе понимания того, почему мы объективно должны делать так, а не иначе, а не по праву первого или в результате простого следования тому, что пишут «классики».
К сожалению, даже с результатами исследований, в большинстве случаев результат будет тот же.
А почему «странно»? Могу понять, что в чем-то трудно, но все равно решаемо.
Я бы прокомментировал это так: этап выделения и чтения идентификаторов находится на более низком уровне, по сравнению с этапом определения их роли, то есть разбора синтаксического выражения. Первый этап явно выигрывает от наличия пробелов, и это определяется нашими психо-физическими особенностями восприятия (т.е. не может быть изменено). То, как интерпретируется выражение, это результат научения и выработанной привычки, и, следовательно, может быть изменено. Мы можем привыкнуть легко читать тексты программ, написанные на разных языках программирования, но отсутствие явного разделения между идентификаторами всегда будет требовать больших ментальных усилий.
Принципиальный вопрос в том, что в английском языке закреплена ассоциация «славяне – рабы». А потому пусть каются.)
Идея приложения тоже очень интересная. А как вы планировали идентифицировать пользователей, если это не секрет?
По поводу неразрешимости задачи декомпозиции в общем случае для 3D сказать сразу ничего не могу. Но как мы видим для случая 2D он не прав.
В статьях его еще меня смутило то, что он вроде бы использует умножение справа, как и у меня, но в случае иерархии объектов сначала применяет матрицу трансформации родительского объекта (глобальную), а не локальную. Это странно. Например, у меня есть квадрат, растянутый в прямоугольник преобразованием масштабирования по оси Y. Он является частью вращающегося объекта. Кажется очевидным, что для того чтобы получить вращающийся прямоугольник, который сохраняет свою геометрию, надо сначала растянуть квадрат и только потом вращать, а не наоборот.
Человек пишет, фактически, что в общем случае задача декомпозиции неразрешима и рассматривает один отдельный случай, в котором отсутствуют преобразования сдвига и порядок применения матриц известен.
На серьезное достижение я не претендую, что вы. Достижение не у меня, а в статье, на которую я ссылаюсь. Я всего лишь вытащил из нее то, что непосредственно требуется для решения поставленной задачи, добавил отсутствующие компоненты и опубликовал здесь в надежде на то, что это может пригодиться еще кому-нибудь. Потому что, это теперь статья Путятина у меня в Гугле выскакивает на первой странице, а когда я искал соответствующую информацию то ли год, то ли полгода назад, как-то ничего не попадалось. То ли я запрос по другому составил, то ли в Гугле что-то подкрутили, или может этой статьи там тогда и не было добавлено. Не знаю.
По поводу формул, спасибо вам за картинки. Пусть они будут здесь. Но, мне все-таки мой вариант нравится больше, за исключением того, что из-за увеличенного интервала между строк разбился "ASCII art" для скобок вокруг матриц. Интересно, можно ли этот интервал локально убрать? А нравится мне мой вариант больше, потому что визуально большой разницы нет (по-крайней мере не для математика), а поскольку это не картинки а текст, его можно просто скопировать и куда-то вставить, например себе в комментарии в код.
По поводу формул, спасибо вам за картинки