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#學習

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 嫩江县| 池州市| 金塔县| 新宁县| 红安县| 中西区| 清丰县| 昆明市| 嘉兴市| 项城市| 商南县| 抚宁县| 勃利县| 淄博市| 双鸭山市| 明光市| 德清县| 新绛县| 台南市| 周至县| 上栗县| 库尔勒市| 波密县| 武宁县| 三原县| 新密市| 申扎县| 诸暨市| 望谟县| 北辰区| 星子县| 鸡泽县| 长丰县| 城固县| 河西区| 灯塔市| 遂溪县| 巫山县| 安仁县| 柘城县| 贺州市|