识别点周围的三角形点

时间:2011-04-06 14:54:20

标签: c# geometry

我在.NET中开发了一个绘制一些行的应用程序。 在一条线的中间,我需要绘制线方向数组。

有:
(xA, yA, xB, yB)(pA, pB) - 段AB
arrWidth, arrHeight - 箭头尺寸;
> B - 箭头方向。

需要:
3个新点pArr1, pArr2, pArr3 - 方向箭头的点,应位于段AB的中间。

enter image description here

1 个答案:

答案 0 :(得分:2)

首先我会做一些定义。

令:

  • p =行尾的位置向量
  • v =线条向量
  • h =箭头高度
  • w =箭头宽度
  • L =逆时针旋转90度

然后你的三点是:

  1. p +(| v | / 2 - h / 2 + w / 2 L)v / | v |
  2. p +(| v | / 2 - h / 2 - w / 2 L)v / | v |
  3. p +(| v | / 2 + h / 2)v / | v |
  4. 其中v / | v |是沿着你的线的单位向量。

    在2维中,L只是映射(x,y)=> (-y,x)

    更明确地说,使用问题中的变量,上面的几点可以用C#编写为:

    // assuming xA, yA, xB, yB, arrWidth, arrHeight are initialised
    var xV = xB - xA;
    var yV = yB - yA;
    var v = Math.Sqrt(xV*xV + yV*yV);
    var pArr1 = new[] {
        xA + xV / 2 - xV * arrHeight / (2 * v) - yV * arrWidth / (2 * v),
        yA + yV / 2 - yV * arrHeight / (2 * v) + xV * arrWidth / (2 * v) };
    var pArr2 = new[] {
        xA + xV / 2 - xV * arrHeight / (2 * v) + yV * arrWidth / (2 * v),
        yA + yV / 2 - yV * arrHeight / (2 * v) - xV * arrWidth / (2 * v) };
    var pArr3 = new[] {
        xA + xV / 2 + xV * arrHeight / (2 * v),
        yA + yV / 2 + yV * arrHeight / (2 * v) };