• 1298 圆与三角形


    1298 圆与三角形

     
    给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交。相交输出"Yes",否则输出"No"。(三角形的面积大于0)。
     

    输入

    第1行:一个数T,表示输入的测试数量(1 <= T <= 10000),之后每4行用来描述一组测试数据。
    4-1:三个数,前两个数为圆心的坐标xc, yc,第3个数为圆的半径R。(-3000 <= xc, yc <= 3000, 1 <= R <= 3000)
    4-2:2个数,三角形第1个点的坐标。
    4-3:2个数,三角形第2个点的坐标。
    4-4:2个数,三角形第3个点的坐标。(-3000 <= xi, yi <= 3000)

    输出

    共T行,对于每组输入数据,相交输出"Yes",否则输出"No"。

    输入样例

    2
    0 0 10
    10 0
    15 0
    15 5
    0 0 10
    0 0
    5 0
    5 5

    输出样例

    Yes
    No

    只要找到方法,这题就很好做.
    主要是要有几何模板

     1 #include <bits/stdc++.h>
     2 #define inf 0x3f3f3f3f
     3 using namespace std;
     4 
     5 double ptosdist(double x, double y, double xx, double yy, double x2, double y2){//点到线段最短距离模板 矢量法
     6     double cnt = (x2 - xx)*(x - xx) + (y2 - yy)*(y - yy);
     7     if(cnt <= 0)
     8         return sqrt((x - xx)*(x - xx) + (y - yy)*(y - yy));
     9 
    10     double ans = (x2 - xx)*(x2 - xx) + (y2 - yy)*(y2 - yy);
    11     if(cnt >= ans){
    12         return sqrt((x - x2)*(x - x2) + (y - y2)*(y - y2));
    13     }
    14     double r = cnt/ans;
    15     double px = xx + (x2 - xx)*r;
    16     double py = yy + (y2 - yy)*r;
    17     return sqrt((x - px)*(x - px) + (py - y)*(py - y));
    18 }
    19 
    20 double ptopdist(double x, double y, double xx, double yy){ //点到点距离
    21     return sqrt((xx - x)*(xx - x) + (yy - y)*(yy - y));
    22 }
    23 int t;
    24 double xn[4], yk[4];
    25 
    26 int main(){
    27     cin>>t;
    28     while(t--){
    29         double an = (double)inf;
    30         double bn = 0;
    31         double x,y,R;
    32         cin>>x>>y>>R;
    33         for(int i = 0; i < 3; i++){
    34             cin>>xn[i]>>yk[i];
    35             bn = max(bn, ptopdist(x, y, xn[i], yk[i]));
    36         }
    37         for(int i = 0; i < 3; i++){
    38             double pos = ptosdist(x, y, xn[i], yk[i], xn[(i+1)%3], yk[(i+1)%3]); 
    39             an = min(an, pos);
    40         }
    41         if(an <= R && bn >= R){
    42             cout<<"Yes"<<endl;
    43         }else{
    44             cout<<"No"<<endl;
    45         }
    46     }
    47     return 0;
    48 }




  • 相关阅读:
    华强北三代悦虎1562A怎么样?
    改丝印的假华强北三代1562A,用芯良苦!
    华强北三代过软件检测的佳和1562A
    Unlua静态导出
    Unlua编程基础
    Android JNI调用
    手机屏幕参数
    UE4 stats性能埋点
    【JWT】JSON Web Token
    【算法】一致性哈希算法实现
  • 原文地址:https://www.cnblogs.com/zllwxm123/p/9905533.html
Copyright © 2020-2023  润新知