代码之家  ›  专栏  ›  技术社区  ›  Pulle

按长度和坡度计算第二个直线点

  •  0
  • Pulle  · 技术社区  · 6 年前

    我有点被这个问题困住了,我试图通过移动第二个点并保持它的斜率来改变绘制的线的长度。

    注意:所有这些都是在wpf的画布上绘制的。

    我计算了坡度:

    var slope = (point2Y - point1Y) / (point2X - point1X);
    

    alpha 坡度角。

    var alpha = Math.Atan(slope);
    

    现在我在用 Math.Cos Math.Sin

    var xNew = point1X + length * Math.Cos(alpha);
    var yNew = point1Y + length * Math.Sin(alpha);
    

    在四个病例中,有两个是好的。 但在另外两种情况下,这些观点似乎“被放在了错误的一边”。

    我不是数学家,经过几次试验都找不到合适的解。

    我感谢任何帮助!

    2 回复  |  直到 6 年前
        1
  •  0
  •   Clemens    6 年前

    使用 Atan2 :

    var alpha = Math.Atan2(point2Y - point1Y, point2X - point1X);
    

    var p1 = new Point(point1X, point1Y);
    var p2 = new Point(point2X, point2Y);
    
    var diff = p2 - p1; // a Vector
    diff.Normalize();
    
    var p3 = p1 + length * diff;
    
        2
  •  0
  •   Yves Daoust    6 年前

    有一个解不需要三角函数。

    Dx= P2x - P1x
    Dy= P2y - P1y
    R= L / √(Dx² + Dy²)
    
    P3x = P1x + R . Dx
    P3y = P1y + R . Dy