【C#】(二维) 直线外一点在直线上的投影点

混江龙づ霸主 提交于 2019-11-27 16:42:49

 

目录

一、基本公式

A、直线公式

a.推理

B、向量垂直公式

a.推理

二、结合公式1【直线公式】与公式2【向量垂直公式】

1.原始计算

2.替换计算

三、简化计算结果

四、公式在C#代码中的应用


一、基本公式

A、直线公式

  •  是直线 

     上的其中一点;
  •  是直线 

     上的另外一点;
  •  是直线 

     外的一点;
  •  是直线 

     外的一点 

      在

     上的投影;

a.推理

B、向量垂直公式

  •  是直线 

     上的其中一点;
  •  是直线 

     上的另外一点;
  •  是直线 

     外的一点;
  •  是直线 

     外的一点 

      在

     上的投影;

a.推理

 

二、结合公式1【直线公式】与公式2【向量垂直公式】

1.原始计算

 

2.替换计算

三、简化计算结果

其中:

  •  是直线 

     上的其中一点;
  •  是直线 

     上的另外一点;
  •  是直线 

     外的一点;
  •  是直线 

     外的一点 

      在

     上的投影;
  •  是 

      到 

    的向量 

     ,

四、公式在C#代码中的应用

         /// <summary>         /// 求直线上的投影点         /// </summary>         /// <param name="P1">直线上的点1</param>         /// <param name="P2">直线上的点2</param>         /// <param name="P3">直线外的点</param>         /// <returns></returns>         public PointF  LinePointProjection(PointF P1,PointF P2,PointF P3)         {             double a1 = P2.X - P1.X;             double b1 = P2.Y - P1.Y;             double y1 = P1.Y;             double x1 = P1.X;             double y2 = P2.Y;             double x2 = P2.X;             double y3 = P3.Y;             double x3 = P3.X;             double a1a1 = Math.Pow(a1, 2.0);             double b1b1 = Math.Pow(b1, 2.0);             double denominator = a1a1 + b1b1;             if (denominator == 0) return P3;              double x1y2 = x1 * y2;             double x2y1 = x2 * y1;             double a1b1 = a1 * b1;             double moleculey = b1b1 * y3 - a1b1 * x3 - a1 * x1y2 + a1 * x2y1;             double moleculex = a1a1 * x3 - a1b1 * y3 - b1 * x2y1 + b1 * x1y2;              return new PointF((float)(moleculex/denominator),(float)(moleculey/denominator));         }

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!