Да, вам нужно user_id = Column(Integer, ForeignKey('users.id'))
или user_id = Column(Integer, ForeignKey('users.id'), nullable=False)
, если это обязательно. Это напрямую переведено на FOREIGN KEY в базовой схеме базы данных, никакой магии.
Простой способ объявить отношения - это user = relationship(Users)
в OpenID
классе. Вы также можете использовать users = relationship('OpenID')
в Users
классе. Параметр backref
позволяет объявлять обе связи одним объявлением: это означает автоматическую установку обратной связи в связанном классе. Лично я предпочитаю использовать backref
-s только для самообращающихся отношений. Причина в том, что мне нравится самодокументированный код: когда вы просматриваете его определение, вы видите все определенные свойства, в то время как в backref
вам нужно просматривать другие классы (вероятно, определенные в других модулях).
Да, можно. Проблема с углами Эйлера заключается в блокировке кардана, в которой некоторые ориентации имеют на одну степень свободы меньше. Когда вы конвертируете углы Эйлера в кватернион, эта проблема решается. Вы можете преобразовать практически любое трехмерное представление оси в форму кватерниона и обратно без потери информации. Матрицы должны быть изотропными (без масштаба или сдвига), а векторы должны быть единичной длины.
Линейная интерполяция между кватернионами называется slerp . Квадратичная интерполяция между кватернионами называется отрядом . Поскольку кватернионы - это просто комплексные числа с тремя мнимыми частями, те же уравнения, которые работают с действительными числами и векторами, применяются к кватернионам. Просто не забудьте использовать правильные правила при умножении, сложении, журнале и возведении в степень. Это может помочь вообразить, что мнимые части i, j и k вместе образуют вектор оси, а действительная часть - это масштаб.
Да и нет. Вот хорошее обсуждение: http://number-none.com/product/Understanding%20Slerp,%20Then%20Not%20Using%20It/
Обратите внимание, что не имеет значения, как вы получили кватернионы, применяются те же правила.
Edit: Я использовал исходный код, представленный в документе, для ряда проектов и могу за него поручиться.
Вы можете интерполировать между кватернионами. Однажды я написал генератор анимации ключевых кадров на основе кватернионов, который генерировал кадры для систем рендеринга из нескольких конкретных точек. Я не могу поделиться кодом, потому что он засекречен :-(
Где-то в 80-х была статья на эту тему в протоколе SIGGRAPH. Основное преимущество кватернионов состоит в том, что нет сингулярности, как в случае с углами Эйлера.
А, вот ссылка:
Шумейкер, Кен «Анимация вращения с помощью кватернионных кривых», SIGGRAPH '85, Сан-Франциско, 22-26 июля 1985 г., том 19, № 3, 1985 ACM 0- 89791-166-0 / 85/007/0245, стр. 245-254.