• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            又是一個求多邊形的核的題。

            /************************************************************************* 
            Author: WHU_GCC 
            Created Time: 2007-9-13 18:07:21 
            File Name: b.cpp 
            Description:  
            ***********************************************************************
            */
             
            #include 
            <iostream> 
            #include 
            <cmath> 
            using namespace std; 
            #define out(x) (cout<<#x<<": "<<x<<endl) 
            const int maxint=0x7FFFFFFF
            typedef 
            long long int64; 
            const int64 maxint64 = 0x7FFFFFFFFFFFFFFFLL; 
            template
            <class T>void show(T a, int n){for(int i=0; i<n; ++i) cout<<a[i]<<' '; cout<<endl;} 
            template
            <class T>void show(T a, int r, int l){for(int i=0; i<r; ++i)show(a[i],l);cout<<endl;} 

            #define EPS 1e-10 
            #define MaxN 100 

            struct point 

                
            double x, y; 
            }


            struct cp 

                
            int n; 
                point p[MaxN]; 
            }


            point intersectL(
            double a1, double b1, double c1, double a2, double b2, double c2) 

                point ret; 
                ret.y 
            = (a1 * c2 - c1 * a2) / (b1 * a2 - a1 * b2); 
                
            if (fabs(a2) < EPS) 
                    ret.x 
            = -(b1 * ret.y + c1) / a1; 
                
            else 
                    ret.x 
            = -(b2 * ret.y + c2) / a2; 
                
            return ret; 
            }
             

            bool isEqual(point inpA, point inpB) 

                
            return (fabs(inpA.x - inpB.x) < EPS && fabs(inpA.y - inpB.y) < EPS); 
            }
             

            double Cross(point inpA, point inpB, point inpC) 

                
            return (inpB.x - inpA.x) * (inpC.y - inpA.y) - (inpC.x - inpA.x) * (inpB.y - inpA.y); 
            }
             

            void Get_line(point inpA, point inpB, double &a1, double &b1, double &c1) 

                a1 
            = inpB.y - inpA.y; 
                b1 
            = inpA.x - inpB.x; 
                c1 
            = inpA.y * (inpB.x - inpA.x) - inpA.x * (inpB.y - inpA.y); 
            }
             

            cp cut(point inpA, point inpB, cp incp) 

                cp ret; 
                point cross; 
                
            int i, j; 
                
            double t1, t2; 
                
            double a1, b1, c1, a2, b2, c2; 
                 
                ret.n 
            = 0
                
            for (i = 0; i < incp.n; i++
                

                    j 
            = i + 1
                    t1 
            = Cross(inpA, inpB, incp.p[i]); 
                    t2 
            = Cross(inpA, inpB, incp.p[j]); 
                    
            if (t1 < EPS && t2 < EPS) 
                    

                        ret.p[ret.n
            ++= incp.p[i]; 
                        ret.p[ret.n
            ++= incp.p[j]; 
                    }
             
                    
            else if (t1 > EPS && t2 > EPS) 
                        
            continue
                    
            else 
                    

                        Get_line(inpA, inpB, a1, b1, c1); 
                        Get_line(incp.p[i], incp.p[j], a2, b2, c2); 
                        cross 
            = intersectL(a1, b1, c1, a2, b2, c2); 
                         
                        
            if (t1 < EPS) 
                        

                            ret.p[ret.n
            ++= incp.p[i]; 
                            ret.p[ret.n
            ++= cross; 
                        }
             
                        
            else 
                        

                            ret.p[ret.n
            ++= cross; 
                            ret.p[ret.n
            ++= incp.p[j]; 
                        }
             
                    }
             
                }
             
                
            if (ret.n == 0
                    
            return ret; 
                
            for (i = 1, j = 1; i < ret.n; i++
                    
            if (!isEqual(ret.p[i - 1], ret.p[i])) 
                        ret.p[j
            ++= ret.p[i]; 
                 
                ret.n 
            = j; 
                
            if (ret.n != 1 && isEqual(ret.p[ret.n - 1], ret.p[0])) 
                    ret.n
            --
                ret.p[ret.n] 
            = ret.p[0]; 
                
            return ret; 
            }
             

            int main() 

                
            int n; 
                cp input, ret; 
                
            while (scanf("%d"&n), n != 0
                

                    input.n 
            = n; 
                    
            for (int i = 0; i < n; i++
                        scanf(
            "%lf%lf"&input.p[n - i - 1].x, &input.p[n - i - 1].y); 
                    input.p[input.n] 
            = input.p[0]; 
                     
                    ret 
            = input; 
                    
            for (int i = 0; i < input.n; i++
                        ret 
            = cut(input.p[i], input.p[i + 1], ret); 
                    
            if (ret.n >= 1
                        printf(
            "1\n"); 
                    
            else 
                        printf(
            "0\n"); 
                }
             
                
            return 0
            }
             
            posted on 2007-09-14 22:18 Felicia 閱讀(498) 評論(0)  編輯 收藏 引用 所屬分類: 計算幾何
             
            久久男人AV资源网站| 丁香色欲久久久久久综合网| 亚洲AV无码一区东京热久久| 一本久久免费视频| 色妞色综合久久夜夜| 亚洲午夜精品久久久久久浪潮| 深夜久久AAAAA级毛片免费看| 日产久久强奸免费的看| 伊人色综合九久久天天蜜桃| 久久亚洲电影| 亚洲AV无一区二区三区久久| 久久国产精品成人免费| 国产精品久久久久久久久久免费| 久久综合狠狠综合久久激情 | 国产午夜精品久久久久九九| 久久夜色撩人精品国产| 久久99国产精品久久99小说| 久久天天躁狠狠躁夜夜avapp| 久久免费美女视频| 久久九九免费高清视频| 伊人久久大香线蕉av一区| 久久精品国产亚洲av麻豆色欲| 蜜桃麻豆www久久| 一本一道久久a久久精品综合 | 亚洲一级Av无码毛片久久精品| 无码人妻久久一区二区三区蜜桃| 久久午夜福利无码1000合集| 久久ZYZ资源站无码中文动漫| 国产福利电影一区二区三区,免费久久久久久久精| 欧美精品一区二区久久| 97精品国产97久久久久久免费| 午夜不卡久久精品无码免费| 精品久久久久久无码国产| 精品国产乱码久久久久久呢 | 久久精品中文騷妇女内射| 国产精品久久成人影院| 香蕉99久久国产综合精品宅男自 | 国产午夜免费高清久久影院| segui久久国产精品| 久久天天躁狠狠躁夜夜96流白浆| 久久涩综合|