202309-2 坐标变换(其二)

简介: 202309-2 坐标变换(其二)

8332e20eda4b454f93183f7041dc5dc3.jpg

862ee7ba5b9b497ca07bb83dce89c41b.jpg

80分暴力:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
int n, m;
struct point
{ // 存操作
  int flag;
  double ee;
} pp[maxn];
int main()
{
  cin >> n >> m;
  for (int u = 1; u <= n; u++) // 存操作
  {
    int op;
    cin >> op;
    if (op == 1)
    {
      pp[u].flag = 1;
      cin >> pp[u].ee;
    }
    else if (op == 2)
    {
      pp[u].flag = 2;
      cin >> pp[u].ee;
    }
  }
  for (int t = 0; t < m; t++)
  {
    int i, j;
    double x, y;
    cin >> i >> j ;
    scanf("%lf %lf", &x,&y);
    for (int u = i; u <= j; u++)
    {
      if (pp[u].flag == 1)
      {
        x = x * pp[u].ee;
        y = y * pp[u].ee;
      }
      else if (pp[u].flag == 2)
      {
        double tx, ty;
        tx = x * cos(pp[u].ee) - y * sin(pp[u].ee);
        ty = x * sin(pp[u].ee) + y * cos(pp[u].ee);
        x=tx,y=ty;
      }
    }
    printf("%.3f %.3f\n", x, y);
  }
}


100分前缀和思想:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
int n, m;
double k[maxn], e[maxn]; // 存前缀
/*只考虑存在拉伸操作的情况下,最终拉伸的系数等于每次拉伸操作系数的乘积。
只考虑存在旋转操作的情况下,最终旋转的角度等于每次旋转操作角度的和。*/
int main()
{
  cin >> n >> m;
  k[0] = 1;
  e[0] = 0;
  for (int u = 1; u <= n; u++) // 存前缀
  {
    int op;
    cin >> op;
    if (op == 1)
    {
      double kk;
      cin >> kk;
      k[u] = k[u - 1] * kk;
      e[u] = e[u - 1];
    }
    else if (op == 2)
    {
      double ee;
      cin >> ee;
      k[u] = k[u - 1];
      e[u] = e[u - 1] + ee;
    }
  }
  for (int t = 0; t < m; t++)
  {
    int i, j;
    double x, y;
    cin >> i >> j;
    scanf("%lf %lf", &x, &y);
    double kk = k[j] / k[i-1]; // 拉伸
    double ee = e[j] - e[i-1]; // 旋转
    double ax, ay, bx, by;
    ax = x * kk;
    ay = y * kk;
    bx = ax * cos(ee) - ay * sin(ee);
    by = ax * sin(ee) + ay * cos(ee);
    printf("%.3f %.3f\n", bx, by);
  }
}


相关文章
|
6月前
|
计算机视觉 Python
透视变换
【5月更文挑战第15天】透视变换。
41 1
|
3月前
第4章-变换-4.3-四元数
第4章-变换-4.3-四元数
35 3
202309-1 坐标变换(其一)
202309-1 坐标变换(其一)
|
机器学习/深度学习 C++
C++实现实现逆时针旋转矩阵
C++实现实现逆时针旋转矩阵
C++实现实现逆时针旋转矩阵
|
6月前
|
算法
[Halcon&拟合] 直线、矩形和圆的边缘提取
[Halcon&拟合] 直线、矩形和圆的边缘提取
376 0
|
图形学
Unity 之 获取物体的旋转角正确数值
不管父物体如何设置,都能获取到物体本身旋转角度的正确数值
1057 0
四元数与三维旋转
四元数与三维旋转
149 0
四元数与三维旋转
|
算法 计算机视觉 Python
霍夫变换绘制出图案里的直线
霍夫变换绘制出图案里的直线
|
算法
唯一坐标转换问题
现在有一个二维坐标组成的数组,例如 [[0,7],[8,10],[12,19],[13,15],[2,9],[19,22],[25,27],[30,33]]; 这些坐标可以按照以下规则进行转换,例如: 1.
1147 0