通过长度和斜率计算线的第二点

时间:2018-10-14 17:52:38

标签: c# wpf math

我有点被这个问题困扰,我试图通过移动第二个点并保持其斜率来更改画线的长度。

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

我计算了斜率:

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

通过使用反正切函数,我能够计算出alpha的倾斜角。

var alpha = Math.Atan(slope);

现在,我正在使用Math.CosMath.Sin来获取我的新观点的坐标。

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

这在4例中的2例中证明是好的。 但是在其他两种情况下,这些点似乎“放错了位置”。

我不是数学家,在经过服务器测试后找不到合适的解决方案。

我感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

使用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;

答案 1 :(得分:0)

有一种不需要三角函数的解决方案。

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

P3x = P1x + R . Dx
P3y = P1y + R . Dy