1 条题解
-
0
📝 题目大意
给定平面上的点 和角度 (度数),求将该点绕原点逆时针旋转 度后的新坐标 。允许误差 。
💡 解题思路
-
题目分析:坐标范围 ,,均为整数。表面是几何题,本质是矩阵乘法——二维平面上的旋转变换。输出要求误差不超过 ,使用
double+setprecision(10)即可满足。 -
算法推导:
- 将角度 从度数转为弧度:(代码中
M_PI为<cmath>提供的 常量)。 - 逆时针旋转 的变换矩阵为:$$\begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}$$
- 因此新坐标:
- 直接套公式输出即可,无需任何分类讨论。
- 将角度 从度数转为弧度:(代码中
-
边界与细节:
- 原点: 旋转后仍为 ,公式自然成立,无需特判。
- :,,坐标不变,公式同样成立。
- 负坐标:输入可为负数,三角函数正确处理,无需额外处理。
- WA 陷阱:注意
sin/cos接受的是弧度而非度数,务必先转换;输出精度不要低于 ,setprecision(10)足够。
⏱️ 复杂度分析
- 时间复杂度:,仅常数次算术运算。
- 空间复杂度:,只使用几个变量。
💻 标准代码 (C++)
#include<bits/stdc++.h> using namespace std; int main(){ double a, b, d; cin >> a >> b >> d; // 将角度从度数转换为弧度(C++三角函数使用弧度制) double rad = d * M_PI / 180.0; // 逆时针旋转变换:应用二维旋转矩阵 double a2 = a * cos(rad) - b * sin(rad); double b2 = a * sin(rad) + b * cos(rad); // 固定输出10位小数,满足 10^{-6} 精度要求 cout << fixed << setprecision(10) << a2 << " " << b2 << endl; return 0; } -
- 1
信息
- ID
- 616
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者