• <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 閱讀(489) 評論(0)  編輯 收藏 引用 所屬分類: 計算幾何
             
            欧美综合天天夜夜久久| 国内精品久久九九国产精品| 亚洲一区精品伊人久久伊人 | 久久精品亚洲男人的天堂| 色综合久久久久综合99| 久久久久免费看成人影片| 久久精品国产精品亚洲下载| 久久精品国产亚洲av麻豆蜜芽| 97久久久精品综合88久久| 色99久久久久高潮综合影院| 久久国产精品成人片免费| 青青草国产97免久久费观看| 久久亚洲高清观看| 久久久国产精华液| 久久国产视频99电影| 91精品国产9l久久久久| 亚洲中文精品久久久久久不卡| 国产精品欧美亚洲韩国日本久久| 亚洲精品国产美女久久久| 午夜福利91久久福利| 青青青国产成人久久111网站| 久久精品国产亚洲AV蜜臀色欲| 午夜视频久久久久一区 | 99久久精品国产一区二区蜜芽| 久久精品国产亚洲AV忘忧草18| 亚洲国产成人久久一区久久| 99久久伊人精品综合观看| 99久久无码一区人妻a黑| 青草国产精品久久久久久| 久久精品国产亚洲AV蜜臀色欲| 日本精品久久久久久久久免费| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 狠狠色狠狠色综合久久| 色婷婷狠狠久久综合五月| 国产成人无码精品久久久免费| 99久久精品国产一区二区三区| 久久精品国内一区二区三区| 久久香蕉国产线看观看99| 伊人久久免费视频| 久久久精品久久久久久| 欧美粉嫩小泬久久久久久久 |