1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- /**
- * point: [x, y]
- * radar: [radarX, radarY]
- * angle: 0, 90, 180, 270 顺时针旋转角度
- * 返回旋转后的点 [x2, y2]
- */
- function rotatePoint(point, radar, angle) {
- const [x, y] = point;
- const [cx, cy] = radar;
- const dx = x - cx;
- const dy = y - cy;
- let nx, ny;
- switch (angle) {
- case 0:
- nx = dx;
- ny = dy;
- break;
- case 90:
- nx = dy;
- ny = -dx;
- break;
- case 180:
- nx = -dx;
- ny = -dy;
- break;
- case 270:
- nx = -dy;
- ny = dx;
- break;
- default:
- throw new Error("angle must be 0, 90, 180, 270");
- }
- return [cx + nx, cy + ny];
- }
- // 测试
- const point = [3, 2];
- const radar = [2, 1];
- [0, 90, 180, 270].forEach(angle => {
- const newPoint = rotatePoint(point, radar, angle);
- console.log(`angle=${angle}:`, newPoint);
- });
- // 预期输出
- // angle=0: [3, 2]
- // angle=90: [2, 0]
- // angle=180: [1, 0]
- // angle=270: [2, 2]
|