我正在用圆形物体编程物理模拟。我通过旋转它们然后将它们推进到它们面向的方向移动我的物体,这使得物理方程很容易处理。但是现在我遇到的问题是,我通过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)
最简单的解决方案是使圆的边界矩形以0,0为中心。那你就不用担心了。它还使模拟更容易,因为那时你正在操纵物体的质心。例如,如果您想要模拟物体在以非零切向速度(垂直于接触法线)撞击时的旋转(旋转),这样的设置将使方程更容易理解。