一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

計(jì)算兩條直線的交點(diǎn)(C#)

 Jcstone 2012-04-25
計(jì)算兩條直線的交點(diǎn)(C#)
2010-03-09 13:06  iceser

        /// <summary>
        /// 計(jì)算兩條直線的交點(diǎn)
        /// </summary>
        /// <param name="p1">L1的點(diǎn)1坐標(biāo)</param>
        /// <param name="p2">L1的點(diǎn)2坐標(biāo)</param>
        /// <param name="p3">L2的點(diǎn)1坐標(biāo)</param>
        /// <param name="p4">L2的點(diǎn)2坐標(biāo)</param>
        /// <returns></returns>
        static PointF GetIntersection( PointF p1, PointF p2, PointF p3, PointF p4 )
        {
            /*
             * L1,L2都存在斜率的情況:
             * 直線方程L1: ( y - y1 ) / ( y2 - y1 ) = ( x - x1 ) / ( x2 - x1 )
             * => y = [ ( y2 - y1 ) / ( x2 - x1 ) ]( x - x1 ) + y1
             * 令 a = ( y2 - y1 ) / ( x2 - x1 )
             * 有 y = a * x - a * x1 + y1   .........1
             * 直線方程L2: ( y - y3 ) / ( y4 - y3 ) = ( x - x3 ) / ( x4 - x3 )
             * 令 b = ( y4 - y3 ) / ( x4 - x3 )
             * 有 y = b * x - b * x3 + y3 ..........2
             *
             * 如果 a = b,則兩直線平等,否則, 聯(lián)解方程 1,2,得:
             * x = ( a * x1 - b * x3 - y1 + y3 ) / ( a - b )
             * y = a * x - a * x1 + y1
             *
             * L1存在斜率, L2平行Y軸的情況:
             * x = x3
             * y = a * x3 - a * x1 + y1
             *
             * L1 平行Y軸,L2存在斜率的情況:
             * x = x1
             * y = b * x - b * x3 + y3
             *
             * L1與L2都平行Y軸的情況:
             * 如果 x1 = x3,那么L1與L2重合,否則平等
             *
            */

            float a = 0, b = 0;
            int state = 0;

            if (p1.X != p2.X)
            {
                a = (p2.Y - p1.Y) / (p2.X - p1.X);
                state |= 1;
            }
            if (p3.X != p4.X)
            {
                b = (p4.Y - p3.Y) / (p4.X - p3.X);
                state |= 2;
            }
            switch (state)
            {
                case 0: //L1與L2都平行Y軸
                    {
                        if (p1.X == p3.X)
                        {
                            throw new Exception("兩條直線互相重合,且平行于Y軸,無法計(jì)算交點(diǎn)。");
                        }
                        else
                        {
                            throw new Exception("兩條直線互相平行,且平行于Y軸,無法計(jì)算交點(diǎn)。");
                        }
                    }
                case 1: //L1存在斜率, L2平行Y軸
                    {
                        float x = p3.X;
                        float y = a * x - a * p1.X + p1.Y;
                        return new PointF(x, y);
                    }
                case 2: //L1 平行Y軸,L2存在斜率
                    {
                        float x = p1.X;
                        float y = b * x + b * p3.X + p3.Y;
                        return new PointF(x, y);
                    }
                case 3: //L1,L2都存在斜率
                    {
                        if (a == b)
                        {
                            throw new Exception("兩條直線平行或重合,無法計(jì)算交點(diǎn)。");
                        }
                        float x = (a * p1.X - b * p3.X - p1.Y + p3.Y) / (a - b);
                        float y = a * x - a * p1.X + p1.Y;
                        return new PointF(x, y);
                    }
            }
            throw new Exception("不可能發(fā)生的情況");
        }
 
 
 
 

編輯本段直線的一般式方程

  適用于所有直線
  Ax+By+C=0
  其中A,B不[同時(shí)為0]
  該直線的斜率為-A/B(B=0時(shí)沒有斜率)
  直線的一般式方程能夠表示坐標(biāo)平面內(nèi)的任何直線。
  當(dāng)方程Ax+By+C=0,(1)平行于x軸時(shí),A=0 B≠0 C≠0 y=-C/B
  ⑵平行于y軸時(shí),A≠0 B=0 C≠0 x=-c/A
 ?、桥cx軸重合時(shí),A=0 B≠0 C=0 y=0
 ?、扰cy軸重合時(shí),A≠0 B=0 C=0 x=0
 ?、蛇^原點(diǎn)時(shí),C=A^2+B^2=0

編輯本段關(guān)于直線的一般式方程的結(jié)論

  兩直線平行時(shí):A1/A2=B1/B2≠C1/C2
  兩直線垂直時(shí):A1A2+B1B2=0
  兩直線重合時(shí):A1/A2=B1/B2=C1/C2
  兩直線相交時(shí):A1/A2≠B1/B2
 
 
 
 
 
 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产精品美女午夜福利| 亚洲欧美国产网爆精品| 在线视频免费看你懂的| 欧美韩日在线观看一区| 老司机精品一区二区三区| 国产精品久久久久久久久久久痴汉 | 一区二区三区在线不卡免费| 欧美精品一区二区水蜜桃| 日韩成人午夜福利免费视频| 深夜福利欲求不满的人妻| 久久国产亚洲精品赲碰热| 青青操成人免费在线视频| 青青操成人免费在线视频| 日本中文字幕在线精品| 免费观看一级欧美大片| 日韩高清一区二区三区四区 | 精品香蕉国产一区二区三区| 亚洲欧美日本成人在线| 欧美黄色成人真人视频| 亚洲精品国产美女久久久99| 成人免费观看视频免费| 婷婷亚洲综合五月天麻豆| 日本本亚洲三级在线播放| 五月天丁香亚洲综合网| 精品熟女少妇av免费久久野外| 欧美精品久久男人的天堂| 亚洲精品一二三区不卡| 日韩特级黄色大片在线观看| 五月天丁香婷婷一区二区| 欧美日韩亚洲国产av| 欧美三级精品在线观看| 大胆裸体写真一区二区| 国产又爽又猛又粗又色对黄| 日本婷婷色大香蕉视频在线观看| 99福利一区二区视频| 欧美精品在线观看国产| 日韩av欧美中文字幕| 熟女中文字幕一区二区三区| 国产av熟女一区二区三区四区| 亚洲国产成人爱av在线播放下载| 九九久久精品久久久精品|