Рассчитать вторую точку линии по длине и наклону - PullRequest
0 голосов
/ 14 октября 2018

Я как бы застрял в этой проблеме, когда пытаюсь изменить длину нарисованной линии, перемещая вторую точку и сохраняя ее наклон.

Примечание: все это нарисовано на холсте в 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 ]

0 голосов
/ 14 октября 2018

Существует решение, которое не требует тригонометрии.

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

P3x = P1x + R . Dx
P3y = P1y + R . Dy
0 голосов
/ 14 октября 2018

Используйте 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...