为什么 ball1.boundingrect.center returns 与 ball2.boundingrect.center 的值相同?
Why ball1.boundingrect.center returns the same value as ball2.boundingrect.center?
我正在用圆圈编写 physis 模拟程序。
Ball.cpp代码:
Ball::Ball()
{
angle = 0;
setRotation(angle);
//set the speed
speed = 5;
double StartX = 720;
double StartY = 80;
StartX = (qrand() % 800);
StartY = (qrand() % 400);
radius = 40;
setTransformOriginPoint(radius,radius);
setPos (StartX,StartY);
}
QRectF Ball::boundingRect() const
{
return QRect(0,0,2*radius,2*radius);
}
bool Ball:: circCollide(QList <QGraphicsItem *> items) {
QPointF c1 = mapToParent(this->boundingRect().center());
foreach (QGraphicsItem * t, items) {
Ball * CastBall = dynamic_cast<Ball *>(t);
if(CastBall)
{
QPointF t1 = mapToScene(CastBall->boundingRect().center());
double distance = QLineF(c1,t1).length();
double radius1 = this->boundingRect().width() / 2;
double radius2 = CastBall->boundingRect().width() / 2;
double radii = radius1 + radius2;
if ( distance <= radii )
{
// qDebug() << "true collision";
return true;
}
}
}
// qDebug() << "false collision";
return false;
}
我遇到的问题是,这串代码 returns 两个对象的中心位置始终具有相同的值,(t1.x == c1.x , t1.y == c1.y) 但是 this == CastBall
returns false,所以它不是同一个对象,它只是具有相同的 boundingRect 中心点坐标。
在调用此函数之前坐标已经相等,并且对于我生成的所有 3 个对象,尽管集合始终具有不同的值。
首先我认为这是一个问题,因为 boundingRect 被定义为一个常量,所以我在我的 class
中创建了这个函数
QRectF Ball:: centerRect()
{
return QRect(0,0,2*radius,2*radius);
}
并且只是用它替换了 boundingRect 的每次使用(没问题,因为我已经在方法中使用了它),但它仍然为两个中心返回相同的值。
我真的无计可施,希望能得到一些帮助。
问题如下:边界矩形的中心没有映射到球的坐标。以下声明应该有效:
mapToScene(mapToItem(castBall, castBall->boundingRect().center()));
我正在用圆圈编写 physis 模拟程序。
Ball.cpp代码:
Ball::Ball()
{
angle = 0;
setRotation(angle);
//set the speed
speed = 5;
double StartX = 720;
double StartY = 80;
StartX = (qrand() % 800);
StartY = (qrand() % 400);
radius = 40;
setTransformOriginPoint(radius,radius);
setPos (StartX,StartY);
}
QRectF Ball::boundingRect() const
{
return QRect(0,0,2*radius,2*radius);
}
bool Ball:: circCollide(QList <QGraphicsItem *> items) {
QPointF c1 = mapToParent(this->boundingRect().center());
foreach (QGraphicsItem * t, items) {
Ball * CastBall = dynamic_cast<Ball *>(t);
if(CastBall)
{
QPointF t1 = mapToScene(CastBall->boundingRect().center());
double distance = QLineF(c1,t1).length();
double radius1 = this->boundingRect().width() / 2;
double radius2 = CastBall->boundingRect().width() / 2;
double radii = radius1 + radius2;
if ( distance <= radii )
{
// qDebug() << "true collision";
return true;
}
}
}
// qDebug() << "false collision";
return false;
}
我遇到的问题是,这串代码 returns 两个对象的中心位置始终具有相同的值,(t1.x == c1.x , t1.y == c1.y) 但是 this == CastBall
returns false,所以它不是同一个对象,它只是具有相同的 boundingRect 中心点坐标。
在调用此函数之前坐标已经相等,并且对于我生成的所有 3 个对象,尽管集合始终具有不同的值。
首先我认为这是一个问题,因为 boundingRect 被定义为一个常量,所以我在我的 class
中创建了这个函数QRectF Ball:: centerRect()
{
return QRect(0,0,2*radius,2*radius);
}
并且只是用它替换了 boundingRect 的每次使用(没问题,因为我已经在方法中使用了它),但它仍然为两个中心返回相同的值。
我真的无计可施,希望能得到一些帮助。
问题如下:边界矩形的中心没有映射到球的坐标。以下声明应该有效:
mapToScene(mapToItem(castBall, castBall->boundingRect().center()));