Naive and Silly Muggles

本文介绍了一个关于判断特定位置是否处于由三个法师形成的最小魔法圈内的算法。该算法首先确定了三个法师位置构成的外接圆,然后通过计算判断一个平民(muggle)的位置相对于此魔法圈的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Three wizards are doing a experiment. To avoid from bothering, a special magic is set around them. 
The magic forms a circle, which covers those three wizards, in other words, all of them are inside or on the border of the circle. 
And due to save the magic power, circle's area should as smaller as it could be.

Naive and silly muggles(who have no talents in magic) should absolutely not get into the circle, 
nor even on its border, or they will be in danger.

Given the position of a muggle, is he safe, or in serious danger?

Input

The first line has a number TT (T10T≤10) , indicating the number of test cases.

For each test case there are four lines. 
Three lines come each with two integers xixi and yiyi (|xi,yi|10|xi,yi|≤10), indicating the three wizards' positions. 
Then a single line with two numbers qxqx and qyqy (|qx,qy|10|qx,qy|≤10), indicating the muggle's position.

Output

For test case XX, output Case #X: first, then output Danger or Safe.

Sample Input


0 0 
2 0 
1 2 
1 -0.5

0 0 
2 0 
1 2 
1 -0.6

0 0 
3 0 
1 1 
1 -1.5

Sample Output

Case #1: Danger 
Case #2: Safe 
Case #3: Safe




#include<iostream>
#include<cstring>
#include<cmath>
#include<string>
#include<cstdio>
using namespace std;


int main()
{
    int tes;
    int cas=0;
    double x1,y1,x2,y2,x3,y3,a,b,r2,x,y;
    scanf("%d",&tes);
    while(tes--)
    {
        scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x,&y);
        //先求出这三个点的外接圆(x-a)^2+(y-b)^2=r^2;
        //r2代表r的平方


        //先判断锐角钝角三角形


        if((x2-x1)*(x3-x1)+(y2-y1)*(y3-y1)<0) //(x1,y1)为钝角
        {
            a=(x3+x2)/2.0,b=(y3+y2)/2.0;
            r2=(a-x2)*(a-x2)+(b-y2)*(b-y2);
        }
        else if((x1-x2)*(x3-x2)+(y1-y2)*(y3-y2)<0) //(x2,y2)为钝角
        {
            a=(x3+x1)/2.0,b=(y3+y1)/2.0;
            r2=(a-x1)*(a-x1)+(b-y1)*(b-y1);
        }
        else if((x1-x3)*(x2-x3)+(y1-y3)*(y2-y3)<0)  //(x3,y3)为钝角
        {
            a=(x2+x1)/2.0,b=(y2+y1)/2.0;
            r2=(a-x1)*(a-x1)+(b-y1)*(b-y1);
        }
        else//是锐角三角型
        {
            a=((x1*x1+y1*y1-x2*x2-y2*y2)*(y1-y3)-(x1*x1+y1*y1-x3*x3-y3*y3)*(y1-y2))/(2.0*((y1-y3)*(x1-x2)-(y1-y2)*(x1-x3)));
            b=((x1*x1+y1*y1-x2*x2-y2*y2)*(x1-x3)-(x1*x1+y1*y1-x3*x3-y3*y3)*(x1-x2))/(2.0*((x1-x3)*(y1-y2)-(x1-x2)*(y1-y3)));
            r2=(x1-a)*(x1-a)+(y1-b)*(y1-b);
        }
        if((x-a)*(x-a)+(y-b)*(y-b)<=r2)
            printf("Case #%d: Danger\n",++cas);
        else
            printf("Case #%d: Safe\n",++cas);
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值