2013山东省第四届ACM省赛 Rescue The Princess

题意:已知一个等边三角形的两个顶点A(x1,y1)和B(x2,y2),求第三个顶点,按照逆时针顺序求。

思路:向量的旋转。

点A和B

          C.

       .

    ----------------

  A(x1,y1)           B(x2,y2)

设x=x2-x1,y=y2-y1,B绕A点旋转a度之后到C,则C的坐标为:

C( x*cos(a)-y*sin(a)+x1 , y*cos(a)+x*sin(a)+y1)。

参考博客:http://www.cnblogs.com/E-star/archive/2013/06/11/3131563.html

#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
int main()
{
    int T;
    double x,y,x1,y1,x2,y2,c1,c2;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
        x=x2-x1;
        y=y2-y1;
        c1=x/2-y*sqrt(3)/2+x1;
        c2=y/2+x*sqrt(3)/2+y1;
        printf("(%.2lf,%.2lf)\n",c1,c2);
    }
    return 0;
}

你可能感兴趣的:(2013山东省第四届ACM省赛 Rescue The Princess)