我有点被这个问题卡住了,我试图通过移动第二个点并保持它的斜率来改变画的线的长度。
注意:所有这些都是在wpf的画布上绘制的。
我计算了坡度:
var slope = (point2Y - point1Y) / (point2X - point1X);
通过使用弧tan函数,我能够计算我的alpha
斜角。
var alpha = Math.Atan(slope);
现在我正在使用Math. Cos
和Math. Sin
来获取我的新点的cooridinates。
var xNew = point1X + length * Math.Cos(alpha);
var yNew = point1Y + length * Math.Sin(alpha);
这在四个案例中有两个是好的。但在另外两种情况下,这些观点似乎“放在了错误的一边”。
我不是数学家,经过几次尝试后都找不到合适的答案。
我感谢任何帮助!
使用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