我有点被这个问题困扰,我试图通过移动第二个点并保持其斜率来更改画线的长度。
注意:所有这些都是在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);
这在4例中的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