2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 
 Re: Матрица поворота для молекулы
Сообщение13.06.2009, 09:15 
Gordmit в сообщении #221746 писал(а):
Недостаток матрицы Алексея К. состоит в том, что вектор $(x,y,z)$ должен быть нормирован (что, впрочем, легко исправить)
Gordmit,
я нисколько не возражаю против наличия недостатков в моём решении (сам их обсуждал), но только не в том, что Вы написали. Это не более чем упрощение нотации, которое лишь стоило пометить другими буковками типа $(x',y',z')$. "Исправлять" его нет никакой нужды; наоборот, любой программист скорее всего использует это, в том числе и при программировании Вашего решения.

Gordmit в сообщении #221734 писал(а):
Могу вот такую матрицу Вам предложить:
$$
\left(\begin{array}{ccc}
\frac{x}{r} & \frac{y}{r} & \frac{z}{r} \\
0 & \frac{z}{d} & -\frac{y}{d} \\
-\frac{d}{r} & \frac{xy}{rd} & \frac{xz}{rd} \\
\end{array}\right)
$$
где $d=\sqrt{y^2+z^2}$, $r=\sqrt{x^2+y^2+z^2}$. В данном случае если $d$ обращается в 0, то это означает, что $y=z=0$, т.е. вектор уже имеет вид $(x,0,0)$ и поворачивать ничего не нужно.

Последнее утверждение неверно: автор ставил задачу так:
Oam в сообщении #221452 писал(а):
Нужно найти унитарную матрицу поворота 3х3, которая бы укладывала этот вектор на ось Х. Т.е. его коодинаты после такого поворота должны стать {r,0,0}, где r - длина вектора.

Стало быть, вектор $(x,0,0)$ должен принять вид $(|x|,0,0)$, и "поворачивать ничего не нужно", если вектор уже имеет вид $(x,0,0),\; \underline{x>0}$. То есть мы возвращаемся к тем же баранам, когда надо проверять особый случай. Разрешать особый случай предварительным поворотом с матрицей
$$\begin{vmatrix} -1&0&0\\0&0&-1\\0&-1&0\end{vmatrix}\qquad\mbox{или с матрицей}\qquad\begin{vmatrix} -1&0&0\\0&-1&0\\0&0&1\end{vmatrix}\;\mbox{---}$$об этом я сильно не задумывался. Здесь могут быть какие-то соображения о непрерывности поворотов, которые склонили меня именно к предельной матрице (в Вашем случае она будет другая), но автор этого не требовал, и мне было лень додумывать. Как, впрочем, всегда лень, (и, похоже, не мне одному) ковырять эти многочисленные (на форуме) задачки с трёхмерными поворотами. :D

Так что ответ на вопрос автора
Oam в сообщении #221549 писал(а):
Возможно ли в принципе построить такую матрицу поворота, чтобы ее элементы были определены для любого ненулевого вектора?
на мой взгляд, не получен. По-прежнему, требуется особая тщательность вычислений при $|y|,|z|\to0$, хотя случай, как быть при $d=0$ в знаменателе, автора почему-то не заинтересовал...

-- 13 июн 2009, 10:31 --

По хорошему, здесь бы надо попробовать выразить всё через тангенсы половинных углов, чьи направляющие косинусы есть $(x'=\cos\alpha,\:y'=\cos\beta,\:z'=\cos\gamma)$, из которых ввиду, наличия нормировочного соотношения, использовать только два (в силу особого статуса оси OX таковыми, видимо, будут $\beta$ и $\gamma$), и посмотреть, не сократятся ли потенциальные неопределённости.
А ещё можно подумать, что все искомые матрицы образуют однопараметрическое семейство и поиграть с параметром. Но это уже если пол вымыт, помидоры пропасынкованы, кина посмотрены, и совсем скучно...

 
 
 
 Re: Матрица поворота для молекулы
Сообщение13.06.2009, 10:36 
О, а у меня некоторое достижение: я наконец-то прочитал первый пост и, кажется, понял, чего хочется. Тогда задача построения нужного ортогонального преобразования решается стандартно -- матрицей Хаусхолдера: $V=I-2{(\,\cdot\,,\vec r-\vec b)\over\|\vec r-\vec b\|^2}\cdot(\vec r-\vec b),$ где $\vec r=(x,y,z)^T$ и $\vec b=(r,0,0)^T.$ В явном виде:
$$V=\begin{pmatrix}1&0&0\\0&1&0\\0&0&1\end{pmatrix}-{2\over (x-r)^2+y^2+z^2}\cdot\begin{pmatrix}x-r\\ y\\ z\end{pmatrix}\cdot\begin{pmatrix}x\!-\!r&y&z\end{pmatrix}.$$
Правда, это пока не поворот, а отражение. Но его очень легко превратить в поворот: достаточно просто заменить здесь вектор $\vec b$ на $(-r,0,0)^T,$ а потом сделать ещё одно отражение, домножив всё дополнительно на матрицу $\begin{pmatrix}-1&0&0\\0&1&0\\0&0&1\end{pmatrix}.$ Это будет поворот, естественно, в плоскости, проходящей через исходный вектор и ось $OX.$

 
 
 
 Re: Матрица поворота для молекулы
Сообщение14.06.2009, 10:59 
Интересно, не приходило в голову сделать поворот из двух отражений.

ewert, а что это за обозначение --- $(\,\cdot\,,\vec r-\vec b)$? (Попадалось в детстве, но забыл :D ).
И определение матрицы Хаусхолдера у Вольфрама, признаться, не понял.
Это отражение относительно "биссекториальной плоскости" двух векторов?
Совсем явный вид итоговой матрицы совпал с моим, чего и следовало ожидать из Вашего последнего пояснения.

 
 
 
 Re: Матрица поворота для молекулы
Сообщение14.06.2009, 20:06 
Алексей К. в сообщении #221920 писал(а):
ewert, а что это за обозначение --- $(\,\cdot\,,\vec r-\vec b)$?

Это просто стандартная договорённость: $(\cdot ,\text{ь})$ -- просто операция, в которой точка помечает тот операнд, на который тот мягкий знак должен был бы действовать. В данном конкретном случае имелся в виду функционал, задаваемый скалярным произведением.

Алексей К. в сообщении #221920 писал(а):
И определение матрицы Хаусхолдера у Вольфрама, признаться, не понял.

А я и не знаю никаких Вольфрамов. Геометрический же смысл той матрицы очень прост: это -- ортогональное преобразование (конкретно отражение), переводящее некий наперёд заданный вектор на некую конкретную ось. И геометрически это вполне прозрачно: из исходного вектора вычитается удвоенная проекция на то, чего не хоцца.

Алексей К. в сообщении #221920 писал(а):
Совсем явный вид итоговой матрицы совпал с моим,

Ну уж наверное, я не вчитывался (с самого начала и сказал), да и до сих пор, честно говоря, лень. Просто вдруг внезапно прочитамши обнаружил, что задача-то -- стандартна.

-- Вс июн 14, 2009 21:19:03 --

Алексей К. в сообщении #221920 писал(а):
Это отражение относительно "биссекториальной плоскости" двух векторов?

а, не заметил, да, разумеется

 
 
 
 Re: Матрица поворота для молекулы
Сообщение15.06.2009, 17:26 
Аватара пользователя
1. Строится один из возможных ортогональных векторов к данному вектору.
Хотябы с помощью векторного произведения исходного на один из базисных векторов (главное, чтобы не коллинеарный).
2. Затем строим вектор ортогональный к исходному и вновь полученному. (тоже черех векторное произведение)
3. Нормализуем все три вектора и составляем матрицу из этого нового базиса.

 
 
 [ Сообщений: 20 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group