【CSP试题回顾】202309-2-坐标变换(其二)

CSP-202309-2-坐标变换(其二)

关键点总结

1.输入输出的同步关闭,以加快I/O操作的速度

  • 这一点还是很重要的,本题代码如果不进行输入输出的同步关闭会时间超限。
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);

2.设置输出的小数精度

#include <iostream>
#include <iomanip>  // 导入设置精度所需的库
using namespace std;int main() {double number = 3.14159265; // 这是我们要格式化的浮点数cout << std::fixed << setprecision(4); // 设置数字格式为固定小数点,并保留小数点后四位cout << number << endl; // 输出结果return 0;
}

3.累计存储k和theta减少时间开销

  • 本题中对坐标变换(比如缩放和旋转)操作的累计处理,其中 k 代表缩放比例,theta 代表旋转角度。在这种处理方法中,ktheta 的值不是独立存储每次操作的结果,而是累积地存储从初始状态到当前状态的变换结果。 通过累积地存储变换参数(ktheta),程序可以避免在每次查询时重复计算从初始状态到当前状态的所有变换。这样,当进行大量的查询时,可以大大减少计算时间,提高程序的效率。在这种方法中,如果需要计算从一个状态到另一个较早状态的逆变换,可以简单地通过比较两个状态的累积参数来实现。这比单独存储每次变换的结果更为简便,因为不需要单独计算逆变换。

解题思路

  1. 结构体定义:定义结构体MyOperate来存储每次操作的k(缩放因子)和θ(旋转角度)。

  2. 主函数初始化:在main函数中,首先设置了输入输出的同步关闭,以加快I/O操作的速度。然后读入操作的总数n和查询的总数m。接下来,初始化一个MyOperate类型的向量optList来存储每次操作后的kθ值。向量的大小设置为n+1,以便存储初始状态(即第0次操作,此时k=1θ=0)和之后每次操作的结果。

  3. 输入操作处理:对于每次输入的操作,根据操作的类型(缩放或旋转),更新结构体数组optList中对应的kθ值。对于缩放操作,更新k值并保持θ不变;对于旋转操作,更新θ值而保持k不变。新的值是基于前一次操作的结果计算得出的

  4. 查询处理:对于每次查询,读入起始操作编号start、结束操作编号end以及查询点的初始坐标(x, y)。使用startend来确定查询范围内的总缩放因子和总旋转角度,即从startend这段操作对点的总影响。然后根据这个总缩放因子和总旋转角度来计算点的最终位置。

  5. 坐标变换:使用总缩放因子kTemp和总旋转角度thetaTemp对点(x, y)进行变换。先对点进行缩放,然后根据旋转角度进行旋转。旋转时需要用到cos(thetaTemp)sin(thetaTemp)来更新点的坐标。

  6. 输出结果:最后,输出经过所有操作后点的新坐标。使用setprecision(4)来设置输出的小数精度。

完整代码

#include <iostream>
#include <vector>
#include <cmath>
#include <iomanip>  // 导入设置精度所需的库
using namespace std;struct MyOperate
{double k;double theta;
};int n, m;int main() {  ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> n >> m;vector<MyOperate>optList(n + 1);// 初始化for (int i = 0; i < n + 1; i++){optList[i].k = 1, optList[i].theta = 0;}// 输入操作for (int i = 1; i <= n; i++){double optFlag, optNum;cin >> optFlag >> optNum;// kif (optFlag==1){optList[i].k = optList[i - 1].k * optNum;optList[i].theta = optList[i - 1].theta;}// thetaelse if (optFlag == 2){optList[i].theta = optList[i - 1].theta + optNum;optList[i].k = optList[i - 1].k;}}// 输入查询for (int i = 0; i < m; i++){int start, end;double x, y;cin >> start >> end >> x >> y;double kTemp = optList[end].k / optList[start - 1].k;double thetaTemp = optList[end].theta - optList[start - 1].theta;double awsX, awsY;awsX = x * kTemp, awsY = y * kTemp;double awsX_temp = awsX, awxY_temp = awsY;awsX = awsX_temp * cos(thetaTemp) - awxY_temp * sin(thetaTemp);awsY = awsX_temp * sin(thetaTemp) + awxY_temp * cos(thetaTemp);cout << fixed << setprecision(4);cout << awsX << " " << awsY << endl;}return 0;
}

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/509559.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

23种设计模式——工厂方法模式

定义&#xff1a; 一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其他子类。 工厂方法通用类图&#xff1a; 这个图更好理解 在工厂方法模式中&#xff0c;抽象产品类Product负责定义产品的共性&#xff0c;实现对事物最抽象的…

【PHP】PHP实现与硬件串口交互,向硬件设备发送指令数据(下)

目录 一、前言 二、 效果图 三、安装PHP扩展 四、添加模拟串口 五、PHP发送数据给硬件 PHP代码 前端代码 一、前言 上篇文章写到PHP怎么与硬件串口交互之实时接收硬件发送的数据&#xff0c;这里同样是以天平为例&#xff0c;介绍怎么向硬件设备发送数据&#xff0c; 需…

2024IPA第九届明星盛典 全球总决赛圆满落幕!

2024年1月30日-2月1日&#xff0c;魔都上海迎来了龙年第一场“少儿形体行业美育春晚”&#xff01;由IPA模特委员会主办的第九届少儿模特明星盛典全球总决赛圆满收官&#xff01;近2000名少儿模特选手从五湖四海而来&#xff0c;决战寒假这场高水准&#xff0c;高人气&#xff…

经典语义分割(一)利用pytorch复现全卷积神经网络FCN

经典语义分割(一)利用pytorch复现全卷积神经网络FCN 这里选择B站up主[霹雳吧啦Wz]根据pytorch官方torchvision模块中实现的FCN源码。 Github连接&#xff1a;FCN源码 1 FCN模型搭建 1.1 FCN网络图 pytorch官方实现的FCN网络图&#xff0c;如下所示。 1.2 backbone FCN原…

Facebook广告资料库是什么?一文教你找到竞争对手的广告!

在今天这个数字营销的时代&#xff0c;了解和分析竞争对手在Facebook广告上的动向成为了跨境电商和社媒营销人员的必备技能。有了Facebook广告资料库&#xff0c;你不仅能够查看竞争对手的广告活动&#xff0c;还能深入了解他们的广告策略。那么&#xff0c;如何利用这个Facebo…

Matlab 机器人工具箱 例程:运动学+动力学+路径规划+可视化

文章目录 1 创建机器人2 机器人显示3 机器人示教4 机器人路径规划&#xff1a;给定关节角路径5 机器人路径规划&#xff1a;给定末端位姿&#xff0c;求关节角路径6 工作空间可视化参考链接 1 创建机器人 clc;clear;close all; deg pi/180;L1 Revolute(d, 0, a, 0, alpha, 0,…

托管服务器常见的问题有哪些(常见托管问题解决)

​  对于我们来说&#xff0c;选择一个合适的服务器托管提供商只是建立和管理自己所属网站的第一步。相对来说&#xff0c;真正的挑战在于解决管理网站运行时可能出现的各种问题。就像有时&#xff0c;有些常见的服务器托管问题是不可避免的&#xff0c;但通过主动监控、定期…

我国数据管理机构陆续完善,推动数据安全产业提速

据国家公务员局消息&#xff0c;2024年2月25日&#xff0c;国家数据局综合司、政策规划司、数据资源司进行了拟招录工作人员的面试。国家数据局下设的五个司局名称目前已经正式确定为&#xff1a;综合司、政策规划司、数据资源司、数字经济司、数字科技和基础设施建设司。 自国…

【AI Agent系列】【MetaGPT多智能体学习】4. 基于MetaGPT的Team组件开发你的第一个智能体团队

本系列文章跟随《MetaGPT多智能体课程》&#xff08;https://github.com/datawhalechina/hugging-multi-agent&#xff09;&#xff0c;深入理解并实践多智能体系统的开发。 本文为该课程的第四章&#xff08;多智能体开发&#xff09;的第二篇笔记。主要是对MetaGPT中Team组件…

docker安装使用基础

一、镜像安装 我的docker安装在centos7虚拟机上&#xff08;关于虚拟机网络设置此前已有总结VMware 搭建centos虚拟机网络设置_vmware centos 网络配置-CSDN博客&#xff09;&#xff0c;现在默认操作系统和网络已就位。 1、安装工具包 # 安装操作一般都需要管理员权限&…

基于Keil的RTE(run time environment)配置GD32开发环境,移植FreeRTOS

前言&#xff1a; 10多年前就用STM32了&#xff0c;最近从STM32转到GD32&#xff0c;感觉国产的芯片发展是真的快&#xff0c;不但更便宜&#xff0c;还更快更好用了&#xff08;是在是受不了STM32 I2C BUSY的那个BUG&#xff09;。 先说下&#xff0c;实际上STM32的程序可以…

2024 CHINASHOP丨悠络客AI应用亮点抢鲜看,还有价值百元门票免费送哦!

3月13日-15日&#xff0c;备受国内外关注的第二十四届中国零售业博览会&#xff08;2024 CHINASHOP&#xff09;将在上海国家会展中心正式开展&#xff01;悠络客作为深耕智慧门店15年的公有云人工智能企业&#xff0c;也将带着全新AI产品和智慧门店解决方案亮相展会&#xff0…