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

题目原意是给你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了。

你可能感兴趣的:(利用旋转矩阵简便旋转二位矢量(SDacm4A题解))