• <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>

            又是一個(gè)求多邊形的核的題。

            /************************************************************************* 
            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 閱讀(497) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 計(jì)算幾何
             
            久久精品国产乱子伦| 久久99九九国产免费看小说| 国产一级做a爰片久久毛片| 国产成人久久AV免费| 精品99久久aaa一级毛片| 久久伊人中文无码| 久久亚洲欧美国产精品| 天天综合久久久网| 精品伊人久久大线蕉色首页| 久久久青草久久久青草| 久久久久久国产精品美女| 国产成人精品久久免费动漫| 久久涩综合| 久久超乳爆乳中文字幕| 开心久久婷婷综合中文字幕| 久久久精品人妻一区二区三区蜜桃| 久久国产成人午夜aⅴ影院| 香蕉久久av一区二区三区| 精品无码人妻久久久久久| 国内精品伊人久久久久AV影院| 国产一区二区三精品久久久无广告 | 久久天堂AV综合合色蜜桃网| 国产亚洲精午夜久久久久久| 亚洲AV日韩精品久久久久久| 久久99久久无码毛片一区二区| 久久久久久久久久久久中文字幕 | 久久免费精品视频| 亚洲熟妇无码另类久久久| 亚洲国产成人久久笫一页| 麻豆精品久久精品色综合| 狠狠88综合久久久久综合网| 亚洲精品国产字幕久久不卡| 欧美激情一区二区久久久| 久久久久国产一区二区三区| 91久久精品国产成人久久| 88久久精品无码一区二区毛片| 996久久国产精品线观看| 国产精品对白刺激久久久| 久久久国产精品亚洲一区| 日日躁夜夜躁狠狠久久AV| 久久综合亚洲欧美成人|