向量的旋转

向量的旋转

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

首先我们先把问题简化一下,我们先研究一个点绕另一个点旋转一定角度的问题。已知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 =∠ECD +∠DCB=90度。

则∠A‘ CD=∠ECD,∠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得出:

AD =  x * sinθ         DC = y * sinθ

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

x1 =  x*cosθ- y * sinθ     y1 = y*cosθ + x * sinθ

则A‘ 的坐标为(x*cosθ- y * sinθ, y*cosθ + x * sinθ)

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

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

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

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

注:xB、yB为B点坐标。

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

时间: 2025-01-31 14:37:59

向量的旋转的相关文章

Board Wrapping(计算几何求凸包加向量的旋转)

UVA - 10652 Board Wrapping Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [Submit]   [Go Back]   [Status] Description Problem B Board Wrapping Input: standard input Output: standard output Time Limit: 2 seconds The small sa

向量旋转 UPC 2217

这道题目是13山东省省赛的签到题,题目大意是给等边三角形的两个定点,让求逆时针旋转之后的第三个点的坐标,原来不会向量的旋转,在网上找了找,找到一篇挺好的,直接贴过来. 向量的旋转 实际做题中我们可能会遇到很多有关及计算几何的问题,其中有一类问题就是向量的旋转问题,下面我们来具体探讨一下有关旋转的问题. 首先我们先把问题简化一下,我们先研究一个点绕另一个点旋转一定角度的问题.已知A点坐标(x1,y1),B点坐标(x2,y2),我们需要求得A点绕着B点旋转θ度后的位置. 如图:A' 就是A点绕B点旋

计算几何之向量旋转

实际做题中我们可能会遇到很多有关及计算几何的问题,其中有一类问题就是向量的旋转问题,下面我们来具体探讨一下有关旋转的问题. 首先我们先把问题简化一下,我们先研究一个点绕另一个点旋转一定角度的问题.已知A点坐标(x1,y1),B点坐标(x2,y2),我们需要求得A点绕着B点旋转θ度后的位置. A点绕B点旋转θ角度后得到的点,问题是我们要如何才能得到A' 点的坐标.(向逆时针方向旋转角度正,反之为负)研究一个点绕另一个点旋转的问题,我们可以先简化为一个点绕原点旋转的问题,这样比较方便我们的研究.之后

POJ 2991 Crane(线段树·向量旋转)

题意  有一个Crane由n条线段连接组成  每个连接点处均可以任意旋转  给你n条线段的长度  然后又m次旋转操作  给你p和r  将第p和第p+1条线段之间的角度旋转为r  即第p条线段绕p的终点逆时针旋转r度后能够与第p+1条重合  问每次旋转后最后一条线段的终点坐标 可以发现  旋转第p+1条线段时  p+1后面的所有线段也一起旋转了  可以把Crane分解为n个向量  这些向量的和也就是Crane终点的坐标  用rad[i]保存第i个向量与第i+1个向量之间的夹角  每次旋转操作时  

n维向量旋转(循环移位)——学习《编程珠玑》

问题: 将一个n元一维向量向左旋转i个位置.例如,当n=8且i=3时,向量abcdefgh旋转为defghabc. 简单的代码使用一个n元的中间向量在n步内完成该工作. 你能否仅使用数十个额外字节的存储空间,在正比于n的时间内完成向量的旋转? 解法: 将x的前i个元素复制到一个临时数组中,然后将剩下的n-i个元素向左移动i个位置,最后将最初的i个元素从临时数组中复制到x中余下的位置.——使用i个额外位置产生过大的存储空间消耗: 定义一个函数将x向左旋转一个位置,时间正比于n,然后调用该函数i次.

四元数运动学笔记(3)四元数和旋转相关的约定表述

1.四元数的约定表述1.1 四元数表述的差异1.2 Hamilton vs JPL1.2.1元素的顺序1.2.2 左手系和右手系1.2.3 旋转操作的对象1.2.4 旋转操作的方向1.3 文章采用的表述1.4扰动和时间导数1.4.1右扰动和左扰动1.4.2 Hamilton表示下的(L-G)的四元数时间导数1.4.3 其他有用的表述方式1.5 barfoot书中表述2.旋转角速率表示旋转积分2.1零阶积分2.2一阶积分2.3归一化处理 1.四元数的约定表述 1.1 四元数表述的差异 根据实部虚部

四元数运动学笔记(4)旋转的雅克比矩阵

1.相对于旋转向量的雅克比2.相对于四元数的雅克比2.1相关公式2.2推导雅克比 1.相对于旋转向量的雅克比 这里在全局系下利用左扰动进行推导: 2.相对于四元数的雅克比 2.1相关公式 三叉积公式: 纯实部的四元数和四元数相乘,这里是实数 两个纯虚四元数相乘: 2.2推导雅克比 由以上三个公式可以得到以下公式的推导,其中这里的在涉及到四元数相乘的情况时,都是四元数的表示形式(纯实部四元数和纯虚部四元数),其他情况下则是正常的标量和三维向量. 旋转过程相对于四元数的雅克比 null

ie旋转滤镜Matrix

旋转一个元素算是一个比较常见的需求了吧,在支持CSS3的浏览器中可以使用transform很容易地实现,这里有介绍:http://www.css88.com/archives/2168,这里有演示http://www.css88.com/tool/css3Preview/Transform.html,就不再介绍了. 在IE下旋转一个元素,则只能靠滤镜了. 如果只是以90度为单位旋转的话,简单地使用这个滤镜就好: filter:progid:DXImageTransform.Microsoft.B

对象旋转

欧拉角(EulerAngle).矩阵(matrix).四元数(Quaternion) 旋转矩阵.欧拉角.四元数主要用于:向量的旋转.坐标系之间的转换.角位移计算.方位的平滑插值计算 四元数的乘法意义:    Q = Q1 * Q2表示的是:Q先做Q2的旋转,再做Q1的旋转的结果,而且多个四元数的旋转也是要以合并的.    四元数做一次乘法需要16次乘法和加法,而3x3矩阵需要27次.所以有多次旋转操作时,使用四元数计算效率更高些.    四元数的插值过度平滑.最常用的是线性插值. Quatern