小编Gui*_*dio的帖子

如何用最少的指令乘以两个四元数?

经过一番思考,我想出了以下代码,用于使用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)

c assembly sse multiplication quaternions

9
推荐指数
1
解决办法
2283
查看次数

如何避免代码重复和使用const成员和继承浪费内存?

我正在实现一些形状类.有没有办法避免代码重复和同时浪费内存?

基本上,我希望基类中的变量是一个常量,每个派生类只有一个副本(如静态成员),但每个派生类的值不同.

例如,我想定义适用于派生类的惯性张量的函数; 对于每个形状,惯性张量是一个常数,所以我不希望每个实例都有一个相同常量的副本.

但是,我不是声明相同的变量并为每个派生类定义相同的函数,而是想在基类中声明一个变量,并在基类中也有一个泛型函数,比如改变惯性张量来自世界到当地坐标,反之亦然.

有办法实现吗?

c++ inheritance

2
推荐指数
1
解决办法
182
查看次数

标签 统计

assembly ×1

c ×1

c++ ×1

inheritance ×1

multiplication ×1

quaternions ×1

sse ×1