在对bbox 进行坐标系转换时heading的处理--使用向量的旋转

news/2024/12/22 2:28:56/

实际做题中我们可能会遇到很多有关及计算几何的问题,其中有一类问题就是向量的旋转问题,下面我们来具体探讨一下有关旋转的问题。

首先我们先把问题简化一下,我们先研究一个点绕另一个点旋转一定角度的问题。已知A点坐标(x1,y1),B点坐标(x2,y2),我们需要求得A点绕着B点旋转θ度后的位置。

A点绕B点旋转θ角度后得到的点,问题是我们要如何才能得到A’ 点的坐标。(向逆时针方向旋转角度正,反之为负)研究一个点绕另一个点旋转的问题,我们可以先简化为一个点绕原点旋转的问题,这样比较方便我们的研究。之后我们可以将结论推广到一般的形式上。

令B是原点,我们先以A点向逆时针旋转为例,我们过A’ 做AB的垂线,交AB于C,过C做x轴的平行线交过A’ 做x轴的垂线于D。过点C做x轴的垂线交x轴于点E。

在这里插入图片描述
令A的坐标(x,y),A’ 坐标(x1,y1),B的坐标(0,0)。我们可以轻松的获取AB的长度,而且显而易见A’ B长度等于AB。假设我们已知θ角的大小那么我们可以很快求出BC和A’ C的长度。BC=A’ B x cosθ,A’ C=A’ B x sinθ。

因为∠A’ CB和∠DCE为直角(显然的结论),则∠A’ CD +∠DCB =∠ECB +∠DCB=90度。

则∠A’ CD=∠ECB,∠A’ DC=∠CEB=90度,因此可以推断⊿CA’ D ∽⊿CBE。由此可以推出的结论有:

BC/BE=A’ C/A’ D和BC/CE=A’ C/CD

当然了DC和A’ D都是未知量,需要我们求解,但是我们却可以通过求出C点坐标和E点坐标间接获得A’ C和CD的长度。我们应该利用相似的知识求解C点坐标。

C点横坐标等于:((|AB| x cosθ) / |AB|) * x = x*cosθ

C点纵坐标等于:((|AB| x cosθ) / |AB|) * y = y*cosθ

则CE和BE的的长度都可以确定。

我们可以通过相⊿CA’ D ∽⊿CBE得出:

A’D = x * sinθ DC = y * sinθ

A’D是通过BC/BE = A’C/A’D得出的

DC是通过BC/EC = A’C/DC得出的

那么接下来很容易就可以得出:

x1 = xcosθ- y * sinθ y1 = ycosθ + x * sinθ

则A’ 的坐标为(xcosθ- y * sinθ, ycosθ + x * sinθ)

我们可以这样认为:对于任意点A(x,y),A非原点,绕原点旋转θ角后点的坐标为:(xcosθ- y * sinθ, ycosθ + x * sinθ)

接下来我们对这个结论进行一下简单的推广,对于任意两个不同的点A和B(对于求点绕另一个点旋转后的坐标时,A B重合显然没有太大意义),求A点绕B点旋转θ角度后的坐标,我们都可以将B点看做原点,对A和B进行平移变换,计算出的点坐标后,在其横纵坐标上分别加上原B点的横纵坐标,这个坐标就是A’ 的坐标。

推广结论:对于任意两个不同点A和B,A绕B旋转θ角度后的坐标为:

(Δxcosθ- Δy * sinθ+ xB, Δycosθ + Δx * sinθ+ yB )

注:xB、yB为B点坐标。

结论的进一步推广:对于任意非零向量AB(零向量研究意义不大),对于点C进行旋转,我们只需求出点A和B对于点C旋转一定角度的坐标即可求出旋转后的向量A’ B’ ,因为向量旋转后仍然是一条有向线段。同理,对于任意二维平面上的多边形旋转也是如此。


http://www.ppmy.cn/news/1120607.html

相关文章

LeetCode99之恢复二叉搜索树(相关话题:中序遍历)

目录 题目描述 解题思路 递归写法 非递归写法 思路拓展 难点剖析

多重视窗管理程序 screen

当我们在使用 MobaXterm/XShell 进行远程访问服务器时,进行远程访问的界面往往不能关掉,否则,程序将不再运行。而且,程序在运行的过程中,还必须时刻保证网络的通常,这些条件都很难得到满足。 为了解决上述…

STM32F103RCT6学习笔记2:串口通信

今日开始快速掌握这款STM32F103RCT6芯片的环境与编程开发,有关基础知识的部分不会多唠,直接实践与运用!文章贴出代码测试工程与测试效果图: 目录 串口通信实验计划: 串口通信配置代码: 测试效果图&#…

2101. 引爆最多的炸弹;752. 打开转盘锁;1234. 替换子串得到平衡字符串

2101. 引爆最多的炸弹 核心思想:枚举BFS。枚举每个炸弹最多引爆多少个炸弹,对每个炸弹进行dfs,一个炸弹能否引爆另一个炸弹是两个炸弹的圆心距离在第一个炸弹的半径之内。 752. 打开转盘锁 核心思想:典型BFS,就像水源扩散一样&a…

人工智能未来可期:超越人类能力的新科技

随着科技的飞速发展,人工智能(AI)已经逐渐成为我们生活、工作不可或缺的一部分。从智能语音助手到自动驾驶汽车,再到医疗诊断和金融投资,AI的应用越来越广泛。本文将探讨人工智能未来的发展趋势,以及可能超…

三行代码实现图像画质修复,图片清晰度修复,清晰度提升python

核心代码 # 原始文件 enhancer ImageEnhance.Sharpness(Image.open(文件路径.png)) # 增强图片 img_enhanced enhancer.enhance(增强系数float) # 输出目标文件 img_enhanced.save(文件名.png)注意,输入输出文件格式必须一致 所需依赖 # 文件选择框&#xff0c…

【LeetCode热题100】接雨水+无重复字符的最长子串+找到字符串中所有字母异位词

42.接雨水 思路: 按照列计算 每列的宽度是1 所以每列承接雨水即为雨水的高度 这一列高度通过看图计算我们可以得到hmin(lh,rh)-h[i] lh是这一列左侧最高柱子的高度,rh为这一列右侧最高柱子的高度 当遇到第一个和最后一个时我们不计算雨水(装…

vuejs - - - - - 递归组件的实现

递归组件的实现 1. 需求描述:2. 效果图:3. 代码3.1 封装组件代码3.2 父组件使用 1. 需求描述: 点击添加行,增加一级目录结构当类型为object or array时,点击右侧➕,增加子集点击右侧🚮&#x…