通过旋转、平移求取矩形顶点坐标

news2024/12/28 14:49:20

前言

旋转和平移是几何变换中两个基本的操作,它们可以用来改变图形的位置和方向

一、旋转

旋转是指将图形绕某一点(通常是原点或中心点)旋转一定的角度。旋转会改变图形的方向,但不会改变其形状或大小。

在二维空间中,旋转变换可以用旋转矩阵表示。假设我们要绕原点 (0, 0) 旋转一个角度 θ,旋转矩阵为:

旋转公式: 对于一个点 (x,y)(x, y)(x,y),旋转后得到的新坐标 (x′,y′)(x', y')(x′,y′) 可以用以下公式计算: 

// 计算旋转后的坐标
Point rotatePoint(const Point& p, float theta) {
    float cosTheta = std::cos(theta);
    float sinTheta = std::sin(theta);

    float xNew = p.x * cosTheta - p.y * sinTheta;
    float yNew = p.x * sinTheta + p.y * cosTheta;

    return {xNew, yNew};
}

二、平移 

平移是指将图形在平面上移动一定的距离。平移不会改变图形的方向、大小或形状,只是改变它的位置。

对于一个点 (x,y)(x, y)(x,y),平移 (dx,dy)(dx, dy)(dx,dy) 后的新坐标 (x′,y′)(x', y')(x′,y′) 可以用以下公式计算:

    // 平移到实际坐标系统中
    vertices[0] = {rotatedTopLeft.x + center.x, rotatedTopLeft.y + center.y};
    vertices[1] = {rotatedTopRight.x + center.x, rotatedTopRight.y + center.y};
    vertices[2] = {rotatedBottomRight.x + center.x, rotatedBottomRight.y + center.y};
    vertices[3] = {rotatedBottomLeft.x + center.x, rotatedBottomLeft.y + center.y};

三、已知矩形中心坐标求取矩形顶点坐标

1. 确定矩形相对于中心点的顶点坐标

在未旋转的情况下,矩形的四个顶点相对于中心点的位置为:

2. 应用旋转矩阵得到新的旋转坐标

3. 平移得到实际坐标 

4. 测试代码 

#include <iostream>
#include <cmath>

struct Point {
    float x, y;
};

// 计算旋转后的坐标
Point rotatePoint(const Point& p, const Point& center, float theta) {
    float cosTheta = std::cos(theta);
    float sinTheta = std::sin(theta);

    float xNew = center.x + (p.x * cosTheta - p.y * sinTheta);
    float yNew = center.y + (p.x * sinTheta + p.y * cosTheta);

    return {xNew, yNew};
}

// 计算矩形的四个顶点
void calculateRectangleVertices(const Point& knownPoint, float width, float height, float angle, Point* vertices) {
    // 矩形顶点相对于已知点(左上角)的未旋转坐标
    Point topLeft = {0, 0};  // 已知点
    Point topRight = {width, 0};
    Point bottomRight = {width, -height};
    Point bottomLeft = {0, -height};

    // 旋转每个顶点并加上已知点坐标
    vertices[0] = rotatePoint(topLeft, knownPoint, angle);
    vertices[1] = rotatePoint(topRight, knownPoint, angle);
    vertices[2] = rotatePoint(bottomRight, knownPoint, angle);
    vertices[3] = rotatePoint(bottomLeft, knownPoint, angle);
}

int main() {
    // 示例:已知点 (3, 4) 是矩形的左上角,宽 4,高 2,旋转角度 45 度 (π/4 弧度)
    Point knownPoint = {3, 4};
    float width = 4, height = 2, angle = M_PI / 4;

    Point vertices[4];  // 用于存储四个顶点的坐标
    calculateRectangleVertices(knownPoint, width, height, angle, vertices);

    // 输出矩形的四个顶点坐标
    for (int i = 0; i < 4; ++i) {
        std::cout << "Vertex " << i + 1 << ": (" << vertices[i].x << ", " << vertices[i].y << ")" << std::endl;
    }

    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

材料力学:5.2 纯弯曲时的正应力

(1)曲率与弯矩之间的关系 图5.2.10静力关系 建立如图5.2.10&#xff08;c&#xff09;所示的xyz坐标&#xff0c;设工件截面的弯矩为 M M M &#xff0c;其与外力偶矩 M e M_e Me​ 等值反向。设截面处工件的曲率半径为 ρ \rho ρ &#xff0c;该工件的弹性模量为 E E …

springsecurity快速入门

Spring Security 是一个功能强大且高度可定制的安全框架&#xff0c;主要用于保护基于 Spring 的应用程序。它提供了一整套用于身份验证、授权、加密、会话管理等功能的工具和 API&#xff0c;从而帮助开发者快速、有效地保护应用程序。 Configuration EnableWebSecurity pu…

YOLO系列和RT-DETR转onnx和tensorrt,测FPS

RT-DETR(RT-DETR: DETRs Beat YOLOs on Real-time Object Detection) 和YOLOv8等在最后加nms RT-DETR转onnx和tensorrt和 RT-DETR转onnx和tensorrt 步骤流程&#xff1a; 1. nvidia驱动&#xff0c;cuda&#xff0c;cudnn三者的版本是相互对应的&#xff0c;必须要确保版本匹…

有什么简单方便的cad编辑器?2024快速进行cad编辑的软件合集

有什么简单方便的cad编辑器&#xff1f;2024快速进行cad编辑的软件合集 在建筑、工程、设计等领域&#xff0c;CAD&#xff08;计算机辅助设计&#xff09;软件是必不可少的工具。然而&#xff0c;面对复杂的CAD文件&#xff0c;有时我们只需要简单的编辑功能&#xff0c;而不…

nginx配置代理https端口的要点

今天配置了一个nginx代理端口&#xff0c;从http转成https的过程&#xff0c;刚开始以为很复杂&#xff0c;后面发现其实就那几个关键点&#xff0c;配置好了&#xff0c;就可以直接跳转 server的监听端口 我们常规nginx监听的端口都是http协议的&#xff0c;没有特殊说明&am…

Javascript实现笛卡儿积算法

在根据商品属性计算SKU时&#xff0c;通常会对商品不同选项的不同属性进行笛卡儿积运算。 function cartesian(elements) {if (!Array.isArray(elements))throw new TypeError();var end elements.length - 1,result [];function addTo(curr, start) {var first elements[s…

电话催收的优劣势

电话催收相比其他催收方式有哪些优势和劣势&#xff1f; 电话催收是催收业务这个场景最常用的一个方式&#xff0c;因为它无可替代。唯一还有催回欠款可能的&#xff0c;就是上门催&#xff0c;那成本太高了&#xff0c;一般不会选择。 优势方面 电话催收的主要优点包括成本低…

C语言实现SHA-256算法校验文件(win32-API)

一、前言 在数字化时代&#xff0c;信息安全与数据完整性成为了不可忽视的关键议题。在众多保障数据完整性的方法中&#xff0c;散列函数扮演着至关重要的角色。SHA-256&#xff08;Secure Hash Algorithm 256&#xff09;作为一种先进的散列算法&#xff0c;以其高度的安全性…

【C++】stack、queue、priority_queue的模拟实现

目录 一、stack &#x1f31f;stack的简单介绍 &#x1f31f;stack的基本使用 &#x1f31f;stack的模拟实现 &#x1f31f;stack模拟实现的完整代码 &#x1f31f;容器适配器 二、queue &#x1f31f;queue的简单介绍 &#x1f31f;queue的基本使用 &#x1f31f;q…

springboot酒店管理系统

springboot221酒店管理系统 摘 要 时代的发展带来了巨大的生活改变&#xff0c;很多事务从传统手工管理转变为自动管理。自动管理是利用科技的发展开发的新型管理系统&#xff0c;这类管理系统可以帮助人完成基本的繁琐的反复工作。酒店是出门的必需品&#xff0c;无论出差还是…

娱乐小项目-树莓派履带小车

快速使用 1.小车上电&#xff0c;开关在电源插口旁边 2.上电之后用电脑查看局域网WIFI&#xff0c;密码是12345678&#xff0c;固定IP是192.168.50.1 3.安装VNC软件&#xff1a;20240324_树莓派履带车\工具 4.打开VNC软件 5.在这个界面下 按ctrlaltt&#xff0c;弹出终端 6.输…

内存管理篇-20 Linux虚拟内存管理

1.虚拟地址的经典布局 这里的内容比较少。只要就是内核用户空间的划分。内核空间又有自己的划分。也需要注意一下每个区域的性能。理论上线性映射是最简单的&#xff0c;所以性能最高。同时&#xff0c;注意内核空间是可以配置的&#xff0c;并不是都3:1。 2.ARM32下的内存…

使用cURL探索WebSocket连接的奥秘

更多内容访问个人网站&#xff1a;孔乙己大叔 在现代Web开发中&#xff0c;实时通信已经成为不可或缺的一部分。WebSocket协议因其能够提供低延迟、全双工的通信能力&#xff0c;而被广泛应用于各种实时应用场景中&#xff0c;如在线聊天、实时通知、游戏等。虽然WebSocket主要…

React 实现PDF预览(数据源使用文件流而不是url)

一 前提 应公司要求&#xff0c;需要进行上传文件&#xff08;pdf&#xff09;的预览功能&#xff0c;网上大部分都是使用url作为预览数据源&#xff0c;但是现在后端那边只返回了pdf文件流&#xff0c;所以本文主要是用文件流来预览pdf。 二 首先需要获取pdf文件流&#xff…

四款经典的防泄密软件,企业防泄密必备软件

防泄密软件有哪些呢&#xff1f;以下是四款经典的防泄密软件介绍&#xff0c;每款软件都将从其主要功能、特点以及适用场景等方面进行详细阐述。 1. 安企神 主要功能&#xff1a; 文件加密&#xff1a;提供全面的文件加密解决方案&#xff0c;支持对敏感文件进行加密处理&…

IP地址在TikTok运营中为何重要?

TikTok作为外贸人宣传推广的重要平台&#xff0c;其运营成效与产品的实际转化率息息相关。然而&#xff0c;在TikTok的运营过程中&#xff0c;一个看似微不足道的元素—IP地址&#xff0c;却扮演着至关重要的角色。本文将深入探讨TikTok运营中IP地址的重要性&#xff0c;揭示其…

ETL数据集成丨SQLServer到Doris的无缝数据同步策略

在数据驱动的新时代&#xff0c;企业对数据的需求日益增加&#xff0c;尤其是数据同步的速度和准确性。随着数据源和数据目标的多样化&#xff0c;如何实现高效、无缝的数据同步成为了许多企业的关注焦点。ETLCloud正是这一领域的先锋&#xff0c;为用户提供了从 SQLServer 到 …

面向GPU计算平台的归约算法的性能优化研究

1 GPU归约算法的实现与优化 图3-1为本文提出的GPU归约算法总图&#xff0c;GPU归约求和算法的实现可以定义为三个层次&#xff1a; 线程内归约&#xff1a;线程从global memory中读取一个或多个数据进行归约操作&#xff0c;再把归约结果写入至LDS&#xff1b;work-group内归…

告警管理大师:深入解析Alertmanager的配置与实战应用

目录 一、前言 二、Alertmanager 简介 三、Alertmanager核心内容介绍 &#xff08;1&#xff09;告警分组&#xff08;Alert Grouping&#xff09; 分组原理 配置示例 &#xff08;2&#xff09;告警路由&#xff08;Alert Routing&#xff09; 路由原理 配置示例 &a…

中资优配:白马股跌出性价比 基金经理公开唱多

近年来走势欠安的一些白马股&#xff0c;其时现已跌出了性价比。 在刚刚宣布的二季报中&#xff0c;就有多名基金司理旗帜鲜明地标明看好此类财物。有基金司理认为&#xff0c;这些个股的股息率已靠近或高于无风险利率&#xff0c;其隐含的长期酬谢水平或许已明显高于其时获商…