• <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 閱讀(490) 評論(0)  編輯 收藏 引用 所屬分類: 計算幾何
             
            久久影视综合亚洲| 久久99热精品| 99久久99久久精品国产片果冻| 亚洲精品无码专区久久同性男| 久久精品免费一区二区| 久久久久久国产精品免费无码 | 亚洲国产精品热久久| 久久久精品久久久久久| 午夜精品久久久久久久久| 久久不射电影网| 99久久精品免费看国产一区二区三区| 性欧美丰满熟妇XXXX性久久久| 国产成人AV综合久久| 无码人妻久久一区二区三区免费 | 亚洲午夜久久久影院伊人| 99久久精品九九亚洲精品| 久久人人青草97香蕉| 夜夜亚洲天天久久| 久久久久久精品免费免费自慰| 国产精品成人无码久久久久久 | 99久久免费国产精品热| 亚洲国产精品成人久久蜜臀| 99国产精品久久| 久久精品九九亚洲精品| 亚洲va久久久噜噜噜久久男同| 久久国产精品波多野结衣AV| 久久精品国内一区二区三区| 久久水蜜桃亚洲av无码精品麻豆| 综合久久给合久久狠狠狠97色 | 日韩精品久久久久久免费| 亚洲国产精品一区二区三区久久| 国产精品嫩草影院久久| 国产精品久久久久久| 国产精品久久久久9999| 99久久精品日本一区二区免费| 久久久久亚洲av无码专区喷水| 漂亮人妻被中出中文字幕久久 | 色88久久久久高潮综合影院| 狠狠色噜噜色狠狠狠综合久久 | 精品久久一区二区| 国产一区二区精品久久|