提问者:小点点

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


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

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

我计算了坡度:

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

通过使用弧tan函数,我能够计算我的alpha斜角。

var alpha = Math.Atan(slope);

现在我正在使用Math. CosMath. Sin来获取我的新点的cooridinates。

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

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

我不是数学家,经过几次尝试后都找不到合适的答案。

我感谢任何帮助!


共2个答案

匿名用户

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

匿名用户

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

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

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