zoukankan      html  css  js  c++  java
  • 【ACM】三点顺序

    三点顺序

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:3
     
    描述

    现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断A,B,C是顺时针给出的还是逆时针给出的?

    如:

    图1:顺时针给出

    图2:逆时针给出 

     

            

           <图1>                   <图2>

     
    输入
    每行是一组测试数据,有6个整数x1,y1,x2,y2,x3,y3分别表示A,B,C三个点的横纵坐标。(坐标值都在0到10000之间)
    输入0 0 0 0 0 0表示输入结束
    测试数据不超过10000组
    输出
    如果这三个点是顺时针给出的,请输出1,逆时针给出则输出0
    样例输入
    0 0 1 1 1 3
    0 1 1 0 0 0
    0 0 0 0 0 0
    样例输出
    0
    1


     
    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    
    int main(){
    
        int x1,y1,x2,y2,x3,y3;
    
        while (scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3)!=EOF)
        {
            if (x1==0 && x2==0 && x3==0 && y1==0 && y2==0 && y3==0)
            {
                break;
            }
            int a1 = x2-x1;        //B-A
            int a2 = y2-y1;
            int b1 = x3-x2;        //C-B
            int b2 = y3-y2;
            int c1 = x3-x1;        //C-A
            int c2 = y3-y1;
    
            
            if (a1==0 || a2==0)        //横或者竖
            {
                if (a1==0)        //
                {
                    if (a2>0)        //
                    {
                        if (b1>0)        //
                        {
                            cout<<"1"<<endl;
                        }
                        else        //
                        {
                            cout<<"0"<<endl;
                        }
                    }
                    else        //
                    {
                        if (b1>0)        //
                        {
                            cout<<"0"<<endl;
                        }
                        else        //
                        {
                            cout<<"1"<<endl;
                        }
                    }
                }
                else            //
                {
                    if (a1<0)        //
                    {
                        if (b2>0)        //
                        {
                            cout<<"1"<<endl;
                        }
                        else        //
                        {
                            cout<<"0"<<endl;
                        }
                    }
                    else            //
                    {
                        if (b2>0)        //
                        {
                            cout<<"0"<<endl;
                        }
                        else        //
                        {
                            cout<<"1"<<endl;
                        }
                    }
                }
            }
            else
            {
                double k = 1.0*a2/a1;
                double temp = y3 - k*(x3-x1) - y1;
                if (a1>0 && a2>0)        //第一象限  不包括边界
                {
                    if (temp>0)
                    {
                        cout<<"0"<<endl;
                    }
                    else
                    {
                        cout<<"1"<<endl;
                    }
                }
                if (a1<0 && a2>0)        //第二象限  不包括边界
                {
                    if (temp>0)
                    {
                        cout<<"1"<<endl;
                    }
                    else
                    {
                        cout<<"0"<<endl;
                    }
                }
                if (a1<0 && a2<0)        //第三象限  不包括边界
                {
                    if (temp>0)
                    {
                        cout<<"1"<<endl;
                    }
                    else
                    {
                        cout<<"0"<<endl;
                    }
                }
                if (a1>0 && a2<0)        //第四象限  不包括边界
                {
                    if (temp>0)
                    {
                        cout<<"0"<<endl;
                    }
                    else
                    {
                        cout<<"1"<<endl;
                    }
                }
            }
    
        }
    
        return 0;
    }        
  • 相关阅读:
    NX二次开发-获得制图中对象的坐标点UF_DRF_ask_origin
    string的find("")
    NX二次开发-设置尺寸的附加尺寸UF_DRF_set_appended_text
    NX二次开发-获取尺寸的附加文本UF_DRF_ask_appended_text
    NX二次开发-更改图纸尺寸内容(编辑文本)uc5566
    NX二次开发-获取工程图尺寸的值UF_DRF_ask_dim_info
    MFC进度条
    NX二次开发-对话框解锁UF_UI_unlock_ug_access
    NX二次开发-对话框加锁UF_UI_lock_ug_access
    <转载>深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别
  • 原文地址:https://www.cnblogs.com/lyc94620/p/9864956.html
Copyright © 2011-2022 走看看