国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

c#求點到直線的投影點坐標

2020-01-24 03:00:42
字體:
來源:轉載
供稿:網友

點在指定直線的投影點,即過點作一垂直于指定直線的直線,與指定直線的交點即為所求。這個問題其實回歸到兩條垂直直線的交點問題,回到最原始的初中幾何知識,復習下
如圖示

首先我們明確下已知條件,指定直線上任一點A,直線斜率k,點C,求點B

說到斜率,就有不存在的情況,如圖(2),顯然這種情況B的橫坐標=A的橫坐標,B的縱坐標=C的縱坐標
本文重點討論第一種情況,其實也很簡單,聯立兩條直線求解即可

直線AB方程式即y-yA=k*(x-xA)
∵兩條垂直直線的斜率乘積 = -1
∴由AB線斜率為k可知BC線斜率為-1/k,可知直線BC方程式為
y-yC=-1/k*(x-xC)
聯立方程組解得
xB = (k * xA+ xC / k + yC - yA) / (1 / k + k)
由xB代入BC方程即可得yB

復制代碼 代碼如下:

        /// <summary>
        /// 求直線外一點到該直線的投影點
        /// </summary>
        /// <param name="pLine">線上任一點</param>
        /// <param name="k">直線斜率</param>
        /// <param name="pOut">線外指定點</param>
        /// <param name="pProject">投影點</param>
        protected void GetProjectivePoint(PointF pLine, double k, PointF pOut, ref PointF pProject)
        {
            if (k == 0) //垂線斜率不存在情況
            {
                pProject.X = pOut.X;
                pProject.Y = pLine.Y;
            }
            else
            {
                pProject.X = (float)((k * pLine.X + pOut.X / k + pOut.Y - pLine.Y) / (1 / k + k));
                pProject.Y = (float)(-1 / k * (pProject.X - pOut.X) + pOut.Y);
            }
        }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扎兰屯市| 大理市| 化德县| 抚宁县| 滨海县| 兴化市| 双桥区| 合肥市| 香港 | 全州县| 县级市| 英德市| 佛冈县| 瓦房店市| 文水县| 任丘市| 和政县| 名山县| 都昌县| 秀山| 邳州市| 弥勒县| 宜阳县| 司法| 望城县| 观塘区| 平湖市| 井冈山市| 盐源县| 大关县| 康乐县| 太康县| 荥阳市| 南陵县| 青海省| 安阳县| 通山县| 班戈县| 郸城县| 浠水县| 浠水县|