Всем привет!!! Существует ли формула, по которой из матрицы можно убрать масштабирование, не зная коэффициентов масштабирования???
Конечно существует, малыш! Любую матрицу преобразования можно разложить в композицию масштабирования и поворота! Вектора, вдоль которых идёт масштабирование, называются собственными векторами, и удовлетворяют уравнению
Ah = lambda h; (1)
Всё, что тебе нужно, чтобы его решить - это решить уравнение
det|A - lambda E| = 0;
Для трёхмерного случая этоу равнение третей сетпени. Решив его, ты найдёшь три числа - lambda1, lambda2, lambda3, которые ещё называются собственными. В нашем простом случае примем, что все они действиетльные.
Дальше тебе нужно построить базис в пространстве R3 из собственных векторов, или, как его ещё называют в этом случае, жорданову цепочку. Каждый вектор этой цепочки являюется собственным, то есть удовлетворяет условию (1) Подставляя последовательно различные собственные числа из тех, что ты нашёл, решаешь систему из трёх линейных уравнений и находишь от одного до трёх собвенных векторов.
Если бы был хоть малюсенький шансик, что ты это поймёшь, я бы рассказал, как быть, когда есть несколько совпадающих космплексных чисел, и как, зная, наконец, собственные числа и собственные вектора, осуществить декомпозицию исходной матрицы. Но, чувствуя, что шансов нет, я просто забью.
Suslik
Я все понял. Ничего сложного ты не рассказал.
Жду продолжения рассказа!
>Я все понял. Ничего сложного ты не рассказал.
Ещё бы я сказал что-то сложнои из программы аналитической геометрии первого курса. Как бы банально это ни звучало, настоятельно рекомендую прочитать учебник Беклемишева "Аналитическая геометрия" от корки до корки - ничего страшного там нет, зато у вас в жизни точно не возникнет подобных вопросов. В принципе, можно было бы написать статью по основам векторной математики в программировании, но зачем, когда всё уже есть, и написано куда лучше, чем написал бы я - скачивай да читай.
Suslik
А мне и не нужны твои объяснения!
mik2060
да куда уж мне..
Suslik
Может быть все-таки лучше полярное разложение? Как раз получится унитарная и положительноопределенная матрица.
да я тоже не совсем понял что он (mik2060) хочет
mik2060
D3DXMatrixDecompose
может тебе это поможет?
а вот и книга рекомендуемая Suslik
http://www.a-geometry.narod.ru/other/books/beklemishev.rar
Suslik
>Ещё бы я сказал что-то сложнои из курса аналитической геометрии первого семестра
А у меня собственные значения, жорданова форма и характеристический многочлен только во втором семе были =(
mik2060
Suslik прав, почитай любой учебник по линалу.
drv47
>А у меня собственные значения, жорданова форма и характеристический многочлен только во втором семе были =(
у меня тоже - исправил :)
Если кто-то не понял, что написал Суслик, то советую к прочтению вот эту пдфку http://cyberzx.com/doc/animation/polar-decomp.pdf
там весьма доходчиво разжёваны алгоритмы декомпозиции матриц аффинного преобразования
mik2060
>А мне и не нужны твои объяснения!
зачем тогда задавать вопрос на форуме?
CyberZX
Я сам нашел инфу!
Помоему глупо считать, что все программисты обязаны вникать в математику на таком глубоком уровне. В программировании, а особенно gamedev, решение математических задач аля декомпозиция матриц или решение уравнений, интегралов, лимитов, занимает самую мизерную долю. Программист в данной области может быть вполне успешным, и намного успешней другого, который живет в математическом мире и как в мире "матрицы" видет вокруг себя интегралы с другими краказяблами (т.е. тут нет связи). Мало того, я даже считаю, что программист не обладающий очень (а может о вообще не очень) глубокими познаниями в математике имеет больше шансов получить высокий карьерной рост, к которому уверен тут все стремятся.
Считаю, что mik2060 поставил вполне корректный вопрос, ну а ответ получил как принято на форуме.
Уверен, что пора отходить от понятий - синдром всезнайки, поскольку писать свой физ-двиг + рендер + игра одновременно не имеет смысла. Неплохо бы иметь базу готовых оптимальных решений различных задач, а не отправлять постоянно для прочтения несколько десятков листов по каждой мелочи (под базой я представляю геймдев форум с вменяемыми ответами на простые вопросы). Это будет намного эффективней, отдать время на написание непосредственно игры/двига/любой задачи, чем потратить день/несколько на понимание, а как декомпозицию получить, чтобы .... (к примеру научить юнита прятаться).
Все сказанное ИМХО, программистам свое, математикам свое.
В свое время, когда я еще учился и работал одновременно, у нас на работе были программисты (тупые как я) и математики. Отлично решались все вопросы. Я тогда бильярд реализовывал с кручеными ударами, перепрыгиванием .... И ничего не помешало реализовать интересную физ-модель, спасибо математику, который расписал все в привычных для студента формулах. Хороший такой симбиоз.
Тема в архиве.