inline QuaternionT<T> QuaternionT<T>::Slerp(T t, const QuaternionT<T>& v1) const { const T epsilon = 0.0005f; T dot = Dot(v1); if (dot > 1 - epsilon) { QuaternionT<T> result = v1 + (*this - v1).Scaled(t); result.Normalize(); return result; } if (dot < 0) dot = 0; if (dot > 1) dot = 1; T theta0 = std::acos(dot); T theta = theta0 * t; QuaternionT<T> v2 = (v1 - Scaled(dot)); v2.Normalize(); QuaternionT<T> q = Scaled(std::cos(theta)) + v2.Scaled(std::sin(theta)); q.Normalize(); return q; }
static void resize(int x,int y){ mp_msg(MSGT_VO, MSGL_V, "[gl] Resize: %dx%d\n",x,y); if (WinID >= 0) { int top = 0, left = 0, w = x, h = y; geometry(&top, &left, &w, &h, vo_screenwidth, vo_screenheight); Viewport(top, left, w, h); } else Viewport( 0, 0, x, y ); MatrixMode(GL_PROJECTION); LoadIdentity(); ass_border_x = ass_border_y = 0; if (aspect_scaling() && use_aspect) { int new_w, new_h; GLdouble scale_x, scale_y; aspect(&new_w, &new_h, A_WINZOOM); panscan_calc_windowed(); new_w += vo_panscan_x; new_h += vo_panscan_y; scale_x = (GLdouble)new_w / (GLdouble)x; scale_y = (GLdouble)new_h / (GLdouble)y; Scaled(scale_x, scale_y, 1); ass_border_x = (vo_dwidth - new_w) / 2; ass_border_y = (vo_dheight - new_h) / 2; } Ortho(0, image_width, image_height, 0, -1,1); MatrixMode(GL_MODELVIEW); LoadIdentity(); if (!scaled_osd) { #ifdef CONFIG_FREETYPE // adjust font size to display size force_load_font = 1; #endif vo_osd_changed(OSDTYPE_OSD); } Clear(GL_COLOR_BUFFER_BIT); redraw(); }
//! [12] QImage scaledToWith(const QImage &image) //! [12] //! [13] QList<QImage> images = ...; QFuture<QImage> thumbnails = QtConcurrent::mapped(images, std::bind(&QImage::scaledToWidth, 100 Qt::SmoothTransformation)); //! [13] //! [14] struct Scaled { Scaled(int size) : m_size(size) { } typedef QImage result_type; QImage operator()(const QImage &image) { return image.scaled(m_size, m_size); } int m_size; }; QList<QImage> images = ...; QFuture<QImage> thumbnails = QtConcurrent::mapped(images, Scaled(100)); //! [14]
inline void QuaternionT<T>::Normalize() { *this = Scaled(1 / std::sqrt(Dot(*this))); }