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);
  }
}


相关文章
|
4月前
|
存储 算法 定位技术
格网DEM生成不规则三角网TIN
格网DEM生成不规则三角网TIN
72 0
202309-1 坐标变换(其一)
202309-1 坐标变换(其一)
|
7月前
|
计算机视觉
OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合
OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合
548 0
|
7月前
|
算法
[Halcon&几何] 矩形顶点和对角连线角度计算
[Halcon&几何] 矩形顶点和对角连线角度计算
151 0
|
7月前
|
算法
[Halcon&拟合] 直线、矩形和圆的边缘提取
[Halcon&拟合] 直线、矩形和圆的边缘提取
465 0
|
计算机视觉
五、OpenCV绘制线、矩形、圆等基本几何形状
通过javaOpenCV中的Imgproc函数进行简单几何图形的绘制
138 0
五、OpenCV绘制线、矩形、圆等基本几何形状
四元数与三维旋转
四元数与三维旋转
167 0
四元数与三维旋转
c3旋转立方体
要求:六面立方体,立体旋转 
96 0
c3旋转立方体
110.绘制彩色抛物线
110.绘制彩色抛物线
108 0
|
算法 计算机视觉 Python
霍夫变换绘制出图案里的直线
霍夫变换绘制出图案里的直线