Nie wiem czy dobrze rozumiem wektor przesunięcia ale masz tu kawałek kodu klasy cPoint, za pomocą którego obrócisz zadany punkt wokół aktualnego punktu
const double cntAnglesToRadians = 3.14159265358979 / 180; //stała przekształcająca stopnie na radiany
cPoint cPoint::GetNewPointRotated(double xDisX, double xDisY, double xAngle){
//funkcja zwracająca nowy punkt, obrócony wokół aktualnego obiektu o zadany kąt
//xDisX, xDisY - pozycja obracanego punktu wyrażona w odległościach X,Y od punktu obrotu
//xAngle - kąt, o jaki należy obrócić punkt
float pX, pY;
pX = this->X + (xDisX * cos(xAngle * cntAnglesToRadians)) - (xDisY * sin(xAngle * cntAnglesToRadians));
pY = this->Y + (xDisX * sin(xAngle * cntAnglesToRadians)) + (xDisY * cos(xAngle * cntAnglesToRadians));
return cPoint(pX, pY);
}
cPoint cPoint::GetNewPointRotated(const cPoint *xPt, double xAngle){
//funkcja zwracająca nowy punkt, obrócony wokół aktualnego obiektu o zadany kąt
//xPt - pozycja obracanego punktu
//xAngle - kąt, o jaki należy obrócić punkt
double pDisX, pDisY;
pDisX = xPt->X - this->X; //odległość punktów na osi X od siebie
pDisY = xPt->Y - this->Y; //odległość punktów na osi Y od siebie
return GetNewPointRotated(pDisX, pDisY, xAngle);
}