Hopes

          Start Here..

           

          TwoLineIsIntersect

                private  bool TwoLineIsIntersect(float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, ref float InterX,ref float InterY)
               {
                    //兩條線段是否相交X0X1 AND X1X2
                     float x, y;
                     float Minx01 = Math.Min(x0, x1);
                     float Miny01 = Math.Min(y0, y1);
                     float Minx23 = Math.Min(x2, x3);
                     float Miny23 = Math.Min(y2, y3);
                     float Maxx01 = Math.Max(x0, x1);
                     float Maxy01 = Math.Max(y0, y1);
                     float Maxx23 = Math.Max(x2, x3);
                     float Maxy23 = Math.Max(y2, y3);
                     
                     if(x1!=x0 && x2!=x3)
                     {
                         float k1 = (y1-y0)/(x1-x0);
                         float k2 = (y3-y2)/(x3-x2);
                         float Den = (y1-y0)*(x3-x2) - (y3-y2)*(x1-x0);
                         if(k1==k2)
                         { //平行不相交
                            float d1 = abs(y0*(x1-x0)-x0*(y1-y0)-y2*(x3-x2)+x2*(y3-y2)); //距離公式d = abs(c1-c2) / sqrt(a*a+b*b)
                            if(d1==0)
                            {//直線重合
                               if((x2>Minx01 && x2<Maxy01 && y2>Miny01 && y2<Maxy01) || (x3>Minx01 && x3<Maxy01 && y3>Miny01 && y3<Maxy01)
                               || (x0>Minx23 && x0<Maxy23 && y0>Miny23 && y0<Maxy23) || (x1>Minx23 && x1<Maxy23 && y1>Miny23 && y1<Maxy23))
                               {  //實際碰撞問題線段重合認為相交了
                                  return true;
                               }
                               else
                               {
                                  return false;
                               }
                            }
                            else
                            {
                               return false;
                            }   
                         }
                         x = ((y2-y0)*(x1-x0)*(x3-x2)+(y1-y0)*(x3-x2)*x0-(y3-y2)*(x1-x0)*x2)/Den;
                         y = ((y1-y0)*(x-x0))/(x1-x0) + y0;
                         if(Minx01<=x && x<=Maxx01 && Miny01<=y && y<=Maxy01 && Minx23<=x && x<=Maxx23 && Miny23<=y && y<=Maxy23)
                         {
                            InterX = x;
                            InterY = y;
                            return true;
                         }
                     }
                     else if(x1==x0 && x2!=x3)
                     {
                         x = x0;
                         y = ((y3-y2)*(x0-x2))/(x3-x2) + y2;
                         if(Minx01<=x && x<=Maxx01 && Miny01<=y && y<=Maxy01 && Minx23<=x && x<=Maxx23 && Miny23<=y && y<=Maxy23)
                         {
                            InterX = x;
                            InterY = y;
                            return true;
                         }
                     }
                     else if(x1!=x0 && x2==x3)
                     {
                         x = x2;
                         y = ((y1-y0)*(x2-x0))/(x1-x0) + y0;
                         if(Minx01<=x && x<=Maxx01 && Miny01<=y && y<=Maxy01 && Minx23<=x && x<=Maxx23 && Miny23<=y && y<=Maxy23)
                         {
                            InterX = x;
                            InterY = y;
                            return true;
                         }       
                     }
                     return false;
                  }

          posted on 2012-08-29 15:01 ** 閱讀(178) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          公告

          你好!

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊

          收藏夾

          C#學習

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 汽车| 石河子市| 曲阳县| 厦门市| 商水县| 防城港市| 法库县| 舒兰市| 汶上县| 都昌县| 遵义县| 广河县| 康乐县| 乡城县| 松潘县| 南溪县| 蓬安县| 宜宾市| 长岛县| 安平县| 昂仁县| 治多县| 仙桃市| 辰溪县| 通河县| 志丹县| 章丘市| 湟中县| 宁远县| 玛多县| 公主岭市| 九龙坡区| 扬州市| 莱州市| 保山市| 福泉市| 孟村| 布尔津县| 晋州市| 乌兰察布市| 天门市|