利用旋转矩阵简便旋转二位矢量(SDacm4A题解)

来源:互联网 发布:美萍软件介绍 编辑:程序博客网 时间:2024/06/05 10:10

题目原意是给你A,B两点坐标,让你求出逆时针的第三点C的坐标。

我这里运用旋转矩阵的方法,大大缩减代码量及code难度。

#include<stdio.h>#include<math.h>int main(){    double x1,x2,y1,y2,ansx,ansy;    int t;    scanf("%d",&t);    while(t--)    {        scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);        double newx2,newy2;        newx2=x2-x1;        newy2=y2-y1;        ansx=newx2*0.5-sqrt(3.0)/2.0*newy2;        ansy=newx2*sqrt(3.0)/2.0+newy2*0.5;        printf("(%.2lf,%.2lf)\n",(ansx+x1),(ansy+y1));    }    return 0;}

首先将A点平移到坐标原点,B点坐标也按A点的平移大小进行平移,然后将B点以A点为中心逆时针旋转60.

在二维空间中,旋转可以用一个单一的角 θ 定义。作为约定,正角表示逆时针旋转。把笛卡尔坐标的列向量关于原点逆时针旋转θ 的矩阵是:
该矩阵的逆矩阵为:
表示较原来反方向旋转θ ,也即顺时针旋转θ
注意,坐标表示成2*1规模的矩阵,展开就OK了。

0 0