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

Rotating around a custom transformOriginPoint behaves like rotating around the standard transformOriginPoint

我正在用圆形物体编写物理模拟程序。我通过旋转它们来移动我的对象,然后将它们推进到它们面对的方向,这使得物理方程式非常容易处理。但是现在我遇到了一个问题,我通过 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 的旋转导致位移对象。

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