Zuguki
@Zuguki
I'm working all the time!

Как повернуть прямую на систему координат?

Добрый вечер! Не понимаю, в чем заключается ошибка при повороте прямой на систему координат. Даны 2 точки прямой, нашел, что угол наклона прямой вычисляется по формуле: (y2-y1) / (x2-x1). По получившемуся значению беру tg и перевожу в радианы.

private static double GetAngleOfInclination(Point a, Point b)
        {
            var angleOfInclination = (double)(b.Y - a.Y) / (b.X - a.X);
            angleOfInclination = Math.Tan(angleOfInclination);
            return GetRadiance(angleOfInclination);
        }

Так же посмотрел, что можно повернуть точки на ось по формулам:
x'=x*cosA + y*sinA
y'=y*cosA - x*sinA


private static double GetXPointWithInclination(double pointX, double pointY, double angleOfInclination)
        {
            var x = pointX * Math.Cos(angleOfInclination) + pointY * Math.Sin(angleOfInclination);
            return Math.Round(x, 1);
        }

        private static double GetYPointWithInclination(double pointX, double pointY, double angleOfInclination)
        {
            var y = -pointX * Math.Sin(angleOfInclination) + pointY * Math.Cos(angleOfInclination);
            return Math.Round(y, 1);
        }


В итоге результат практически ничем не отличается от начального. Ожидаемый результат: чтобы заданная точками прямая лежала на одной из осей, следовательно, X или Y должен стать нулем для точек.
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега Математика
Разработчик на С++, экс-олимпиадник.
Вам надо арктангенс брать от отношения, а не тангенс (y2-y1) / (x2-x1).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Lynn
@Lynn
nginx, js, css
> беру tg и перевожу в радианы

Во-первых, вам нужен арктангенс.
Во-вторых, он уже будет в радианах.

Ну, а в-третих, это вообще не нужно. У вас есть две точки и формулы для их перевода в новую систему координат. Нужно просто их туда перевести и у вас будут новые координаты этих точек которые описывают прямую.
Ответ написан
Griboks
@Griboks Куратор тега C#
Ожидаемый результат: чтобы заданная точками прямая лежала на одной из осей, следовательно, X или Y должен стать нулем для точек.

Координаты первой точки: (0; 0),
второй: (1; 0).
Теперь ваша прямая автоматически повернулась на нужный угол и лежит на оси.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы