经过一番思考,我想出了以下代码,用于使用SSE乘以两个四元数:
#include <pmmintrin.h> /* SSE3 intrinsics */
/* multiplication of two quaternions (x, y, z, w) x (a, b, c, d) */
__m128 _mm_cross4_ps(__m128 xyzw, __m128 abcd)
{
/* The product of two quaternions is: */
/* (X,Y,Z,W) = (xd+yc-zb+wa, -xc+yd+za+wb, xb-ya+zd+wc, -xa-yb-zc+wd) */
__m128 wzyx = _mm_shuffle_ps(xyzw, xyzw, _MM_SHUFFLE(0,1,2,3));
__m128 baba = _mm_shuffle_ps(abcd, abcd, _MM_SHUFFLE(0,1,0,1));
__m128 dcdc = _mm_shuffle_ps(abcd, abcd, _MM_SHUFFLE(2,3,2,3));
/* variable names below are for parts of componens of result (X,Y,Z,W) */
/* nX stands for -X …Run Code Online (Sandbox Code Playgroud) 我正在实现一些形状类.有没有办法避免代码重复和同时浪费内存?
基本上,我希望基类中的变量是一个常量,每个派生类只有一个副本(如静态成员),但每个派生类的值不同.
例如,我想定义适用于派生类的惯性张量的函数; 对于每个形状,惯性张量是一个常数,所以我不希望每个实例都有一个相同常量的副本.
但是,我不是声明相同的变量并为每个派生类定义相同的函数,而是想在基类中声明一个变量,并在基类中也有一个泛型函数,比如改变惯性张量来自世界到当地坐标,反之亦然.
有办法实现吗?