12.08.2014 / 18:20 | |
Reaper Пользователь Сейчас: Offline
Регистрация: 13.09.2013
| Пытался разобраться с матрицами для перемещения/вращения камеры, но получился какой-то бред. Например — нужно перенести координаты из WCS в CCS
[x'] [1 0 0 -camerax] [x] [y'] = [0 1 0 -cameray] * [y] [z'] [0 0 1 -cameraz] [z] [ 1] [0 0 0 1 ] [1]
Но вычитать можно только матрицы одного размера. И вот это вот "100-camerax" — бред какой-то.
|
12.08.2014 / 19:04 | |
Ксакеп Модератор форума Сейчас: Offline
Регистрация: 20.06.2012
| Reaper, [100 – camerax] — это строка в матрице, правильнее так: [1, 0, 0, –camerax]
Более того, у тебя там произведение матриц, а не вычитание, то есть: [новая система координат/углов] = [матрица-преобразователь] * [старая система координат]
У матриц операция произведения определена по-своему. Тут нужно нагуглить "алгебра матрицы операции", почитать, что там и как.
Если лень, то расписал: x' = 1*x + 0*y + 0*z –1*camerax = x – camerax, y' = 0*x + 1*y + 0*z –1*cameray = y – cameray, z' = 0*x + 0*y + 1*z –1*cameraz = z – cameraz.
Изменено Ксакеп (12.08 / 19:12) (всего 3 раза) |
12.08.2014 / 19:48 | |
Reaper Пользователь Сейчас: Offline
Регистрация: 13.09.2013
| Ксакеп, спасибо.
|
16.08.2014 / 22:15 | |
SeTSeR Пользователь Сейчас: Offline
Имя: Сергей Откуда: Где-то возле Москвы Регистрация: 01.07.2012
| Подскажите онлайн-интерпретатор APL/J/K
|
16.08.2014 / 22:19 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| SeTSeR, Как раз недавно видел, но там не все что тебе нужны http://repl.it/languages |
16.08.2014 / 22:28 | |
SeTSeR Пользователь Сейчас: Offline
Имя: Сергей Откуда: Где-то возле Москвы Регистрация: 01.07.2012
| Naik, спс Да мне бы любой из них, это по сути одно и то же Изменено SeTSeR (16.08 / 22:28) (всего 1 раз) |
21.08.2014 / 10:45 | |
RGT Пользователь Сейчас: Offline
Имя: Snork Откуда: Yerevan Регистрация: 03.02.2010
| Есть задача: распознать арность вызова функции при использовании метода shunting yard. Вопрос: как распознать 0 от 1? Если считать по запятым, то, что в 0, что в 1, их нет. На момент проблемы ситуация такая:
Output queue: Stack: funcall left_par
Проблемные списки лексем: Nullary: right_par Unary: value right_par Binary: value comma value right_par ...
Пояснение по алгоритму (для ленивых): На следующих итерациях, если в очереди лексем... * right_par -> из стека уйдёт left_par, в свою очередь, right_par тоже уйдёт из очереди; * value -> уйдёт в выходную очередь (output queue); * comma -> пока на вершине стека не left_par, все лексемы перекладываюся из стека в выходную очередь.
__________________
don't tread on me |
21.08.2014 / 10:48 | |
RGT Пользователь Сейчас: Offline
Имя: Snork Откуда: Yerevan Регистрация: 03.02.2010
| Если же делать костыли типа запоминания состояния (т.е. ожидаем вызов функции) и подсчёта значений, может выйти не хорошая ситуация: Lexems: funcall left_par value plus value right_par т.е. fun(1+1)
__________________
don't tread on me |
21.08.2014 / 11:03 | |
RGT Пользователь Сейчас: Offline
Имя: Snork Откуда: Yerevan Регистрация: 03.02.2010
| Нашёл слишком некрасивое решение, всё с тем же запоминанием состояния: * запоминаем вызов (в прочем, это и делалось ранее), * если value -> ставим флаг, что аргументы были, * если right_par -> проверяем флаг, was_args ? count_of_commas + 1 : 0 __________________
don't tread on me |
21.08.2014 / 12:47 | |
Ксакеп Модератор форума Сейчас: Offline
Регистрация: 20.06.2012
| RGT, компиляторы пишете штоле?
|