A : Rescue The Princess

题意:

给你平面上的两个点A,B,求点C使得A,B,C逆时针成等边三角形。

思路:

http://www.cnblogs.com/E-star/archive/2013/06/11/3131563.html   向量的旋转。

直接套公式就行,或者我们可以找到等式解一个二元一次方程然后向量判断方向即可。我比较懒,就写了向量旋转的。

#include <iostream>  
#include <cstdio>  
#include <cmath>  
#include <vector>  
#include <cstring>  
#include <algorithm>  
#include <string>  
#include <set>  
#include <functional>  
#include <numeric>  
#include <sstream>  
#include <stack>  
#include <map>  
#include <queue>  
  
#define CL(arr, val)    memset(arr, val, sizeof(arr))  
  
#define lc l,m,rt<<1  
#define rc m + 1,r,rt<<1|1  
#define pi acos(-1.0)  
#define ll __int64  
#define L(x)    (x) << 1  
#define R(x)    (x) << 1 | 1  
#define MID(l, r)   (l + r) >> 1  
#define Min(x, y)   (x) < (y) ? (x) : (y)  
#define Max(x, y)   (x) < (y) ? (y) : (x)  
#define E(x)        (1 << (x))  
#define iabs(x)     (x) < 0 ? -(x) : (x)  
#define OUT(x)  printf("%I64d\n", x)  
#define lowbit(x)   (x)&(-x)  
#define Read()  freopen("din.txt", "r", stdin)  
#define Write() freopen("dout.txt", "w", stdout);  
  
  
#define M 137  
#define N 22  
  
using namespace std;  
  
  
const int inf = 0x7f7f7f7f;  
const int mod = 1000000007;  
  
double xx1,yy1,xx2,yy2;  
  
int main()  
{  
//    Read();  
    int T;  
    scanf("%d",&T);  
    while (T--)  
    {  
        scanf("%lf%lf%lf%lf",&xx1,&yy1,&xx2,&yy2);  
//        printf("%.3lf %.3lf %.3lf %.3lf\n",xx1,yy1,xx2,yy2);  
        double tx = xx2 - xx1;  
        double ty = yy2 - yy1;  
  
        double x = tx*(1.0/2.0) - ty*(sqrt(3.0)/2.0) + xx1;  
        double y = ty*(1.0/2.0) + tx*(sqrt(3.0)/2.0) + yy1;  
        printf("(%.2lf,%.2lf)\n",x,y);  
    }  
    return 0;  
}  
View Code

相关文章: