围绕自定义transformOriginPoint旋转的行为类似于围绕标准transformOriginPoint旋转

时间:2015-08-15 13:04:21

标签: c++ qt qgraphicsscene

我正在用圆形物体编程物理模拟。我通过旋转它们然后将它们推进到它们面向的方向移动我的物体,这使得物理方程很容易处理。但是现在我遇到的问题是,我通过QRectF对象定义的圆圈围绕它们的原点旋转,这不是它们的中心,看起来很傻。

我尝试过使用

 setTransformOriginPoint (mapToItem(this,40,40));
 setRotation(phi);
 setTransformOriginPoint (mapToItem(this,0,0));

其中40/40是我圈子的中间但它仍然围绕原点旋转。

我也试过

this->setTransform(QTransform()
  .translate(this->boundingRect().center().x(),this->boundingRect().center().y())
  .rotate(alpha)
  .translate(-this->boundingRect().center().x(),-this->boundingRect().center().y()));

但是这提出了一个问题,即它没有改变我在对象上调用rotation()时得到的值。我只是通过在我的对象中保存当前的旋转来解决这个问题,但是这个字符串似乎只在我第一次在构造函数中调用它时才起作用,之后它完全出现故障,例如旋转0会导致位移对象

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是使圆的边界矩形以0,0为中心。那你就不用担心了。它还使模拟更容易,因为那时你正在操纵物体的质心。例如,如果您想要模拟物体在以非零切向速度(垂直于接触法线)撞击时的旋转(旋转),这样的设置将使方程更容易理解。