C# 确定点周围的三角形点

C# 确定点周围的三角形点,c#,geometry,C#,Geometry,我在.NET中开发了一个应用程序,可以画一些线。 在直线的中间,我需要画线方向数组。 有: (xA,yA,xB,yB)或(pA,pB)-段AB点 arrWidth、arrHeight-箭头尺寸 >B-箭头方向 需要: 3个新的点 PARR1,PARR2,PARR3指向箭头的点,应该位于段 AB < /代码>的中间。< /P> 首先,我将给出一些定义 让我们: p=线尾的位置向量 v=线向量 h=箭头高度 w=箭头宽度 L=逆时针旋转90度 那么你的三点是: p+(|v |/2-h/2+w/2

我在.NET中开发了一个应用程序,可以画一些线。 在直线的中间,我需要画线方向数组。

有:
(xA,yA,xB,yB)
(pA,pB)
-段
AB

arrWidth、arrHeight
-箭头尺寸
>B
-箭头方向

需要:
3个新的点<代码> PARR1,PARR2,PARR3指向箭头的点,应该位于段<代码> AB < /代码>的中间。< /P>
首先,我将给出一些定义

让我们:

  • p=线尾的位置向量
  • v=线向量
  • h=箭头高度
  • w=箭头宽度
  • L=逆时针旋转90度
那么你的三点是:

  • p+(|v |/2-h/2+w/2 L)v/| v|
  • p+(|v |/2-h/2-w/2 L)v/| v|
  • p+(| v |/2+h/2)v/| v|
  • 其中v/| v |是沿着直线的单位向量

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

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


    你能更清楚一点你需要什么吗?这可能不是一个数学问题。@picakhu:更新了图纸。我希望你意识到你的问题仍然不清楚。1。方向。2.箭头的大小。3.这和数学有什么关系。因为我不是真正的数学家,你能“规范化”你的公式,以便被一种编程语言使用吗?就像用罪恶,因为,等等…我还是不明白。。。在C#中没有向量的概念,例如。。。你能不使用矢量来表示它吗?谢谢。这正是以“pArr1=”开头的代码片段的目的。这应该是有效的C#,前提是声明了pArr1,并且您已将px、py、vx、vy和v初始化为指定的值。初始化了问题变量后,这实际上是在.NET 4下编译的谢谢,你是个天才!我只是替换了[] PAR<代码> var PARR1=新点(< /代码>,因为我在WPF中:)
    // 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) };