我为指针定义了一个多边形:
0,-12,10,12,-10,12
此多边形的质心是:
0,0
我想围绕质心旋转多边形,这样45度使指针指向2点钟,180度会使指针指向6点钟位置,270点钟位置到9点钟位置。
我在Qt5.6中写这个,到目前为止我的代码看起来像这样,我知道它不正确:
QStringList lstPoints = strPoints.split(clsXMLnode::mcucPointsDelimiter);
int intPoints = lstPoints.length();
if ( intPoints >= 2 ) {
int intArraySize = intPoints / 2;
QPoint aryPts[intArraySize], ptXY = pobjChild->ptGetXY();
int i, p;
i = p = 0;
while( p<intPoints ) {
float fltX = lstPoints[p++].toFloat()
,fltY = lstPoints[p++].toFloat();
if ( fltAngle != 0.0f ) {
double dblRadians = (fltAngle / 180.0) * M_PI
,dblCosAngle = cos(dblRadians)
,dblSinAngle = sin(dblRadians);
fltX = fltX * dblCosAngle - fltY * dblSinAngle;
fltY = fltY * dblSinAngle + fltX * dblCosAngle;
}
//Translate local co-ordinates to co-ordinates to be used on display
fltX += (float)ptXY.x();
fltY += (float)ptXY.y();
aryPts[i++] = QPoint((int)fltX, (int)fltY);
}
if ( strColor.isEmpty() != true ) {
pobjPainter->setPen(QColor(strColor));
}
if ( strFill.isEmpty() != true ) {
pobjPainter->setBrush(QBrush(QColor(strFill)));
}
pobjPainter->drawPolygon(aryPts, intArraySize, Qt::WindingFill);
strPoints是一个字符串,其中包含由','。
分隔的多边形如果没有旋转(0),多边形就会出现在我预期的位置,但是任何旋转它仍然会出现在我预期的位置,但看起来不正确。
答案 0 :(得分:0)
问题在于:
fltX *= dblCosAngle - fltY * dblSinAngle;
fltY *= dblSinAngle + fltX * dblCosAngle;
这相当于
fltX = fltX*(dblCosAngle - fltY * dblSinAngle);
fltY = fltY*(dblSinAngle + fltX * dblCosAngle);
但你应该使用
double tmpX = fltX;
fltX = fltX*dblCosAngle - fltY*dblSinAngle;
fltY = fltY*dblCosAngle + tmpX*dblSinAngle;