小编Dol*_*hay的帖子

括号是否强制执行评估顺序并定义未定义的表达式?

当我遇到这个问题时,我正在阅读我的教科书

  1. 在下面的表达式之后,a的值是多少?
    假设a的初始值为5.Mention步骤
    • 一个+ =(A ++)+(++ A)

起初我认为这是未定义的行为,因为a已被多次修改.
那么我就读了这个问题并说它提到了步骤所以我可能认为这个问题是正确的.

所以我的问题是:

  • 应用括号是否定义了未定义的行为?
  • 是否在评估括号表达式后创建了序列点?
  • 如果已定义,则括号如何重要,因为++和()具有相同的优先级

注意:一个解释清楚的答案将得到我的投票

c c++ expression operator-precedence undefined-behavior

13
推荐指数
2
解决办法
1742
查看次数

四元数到旋转矩阵,使用特征库的值不正确

我正在尝试使用关于Y轴的四元数将对象旋转45度.指定四元数后我试图获得旋转矩阵.但我看到的价值不正确

Eigen::Quaterniond q;
q.x() = 0;
q.y() = 1;
q.z() = 0;
q.w() = PI/8;    // Half of the rotation angle must be specified, even IDK why

Eigen::Matrix3d R = q.normalized().toRotationMatrix();
std::cout << "R=" << std::endl << R << std::endl;
Run Code Online (Sandbox Code Playgroud)

输出:

R=
-0.732    -0   -0.680
     0     1       -0
 0.680     0   -0.732
Run Code Online (Sandbox Code Playgroud)


由于沿Y轴的OpenGL旋转矩阵应该是:

在此输入图像描述

因此我的预期输出应该是:

R=
 0.707     0    0.707
     0     1        0
-0.707     0    0.707
Run Code Online (Sandbox Code Playgroud)

不仅价值偏低一小部分,价值上的错误符号也会导致一些意外的轮换.由于负号,我的立方体正在进行180度转弯加上指定的角度.这一整天都让我不知所措.有人可以告诉我我做错了什么吗?

c++ opengl rotation matrix quaternions

3
推荐指数
1
解决办法
1万
查看次数