C++ VecPosition 类中向量旋转的实现

我是个学生 问一下各位大神
定义了VecPosition类 里面有个函数VecPosition rotate ( double angle)
是用来实现向量旋转的 应该怎么实现?
ps私有变量是m_x,m_y表示点的坐标

该回答引用ChatGPT

实现向量旋转的核心是使用旋转矩阵将向量绕原点旋转一定角度。旋转矩阵的构造方式如下:

| cos(theta)  -sin(theta) |
| sin(theta)   cos(theta) |

其中theta表示旋转角度,cos和sin分别表示对应角度的余弦和正弦值。


对于VecPosition类的rotate函数,可以按照以下步骤实现:

  • 将角度转换为弧度制,以便使用C++中的数学函数。

  • 使用旋转矩阵将向量绕原点旋转一定角度。具体地,可以将该向量的坐标乘以旋转矩阵,得到旋转后的向量的坐标。

  • 将旋转后的向量坐标更新到VecPosition对象中。

下面是rotate函数的实现代码:

VecPosition VecPosition::rotate(double angle) const {
    double radians = angle * M_PI / 180.0;  // 将角度转换为弧度制
    double cosVal = cos(radians);
    double sinVal = sin(radians);
    double newX = m_x * cosVal - m_y * sinVal;  // 旋转矩阵的计算
    double newY = m_x * sinVal + m_y * cosVal;
    return VecPosition(newX, newY);  // 将旋转后的向量坐标更新到VecPosition对象中并返回
}

其中,VecPosition(newX, newY)用于创建新的VecPosition对象,将旋转后的向量坐标更新到该对象中,并返回该对象。