Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Vlad222222
1 / 1 / 0
Регистрация: 16.07.2013
Сообщений: 42
#1

Матрица перехода между двумя системами координат в 2D - C++

19.07.2016, 10:54. Просмотров 318. Ответов 4
Метки нет (Все метки)

Есть 2 системы координат в 2D пространстве. Есть координаты 2 точек в этих системах координат (как я понимаю, необходимо как раз 2 точки). Нужно найти матрицу перехода (X, Y, fi) между этими системами координат.

Не подскажите, где взять готовый код на C++ или другом языке для решения этой задачи. А то решаю в лоб, получаются довольно большие уравнения с тригонометрией и несколькими решениями).
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2016, 10:54     Матрица перехода между двумя системами координат в 2D
Посмотрите здесь:
1. Создайте структуру описывающую в трехмерной системе координат (x, y, z). Найдите расточник между двумя точк C++
Переводы между системами счисления C++
C++ Алгоритм перевода между системами счисления
Квадратная матрица, номера столбцов с двумя простыми числами C++
C++ Builder Переменные между двумя Unit
C++ Расстояние между двумя точками
чат между двумя приложениями C++ WinAPI
C++ Сумма между двумя контейнерами
C++ Взаимодействие между двумя программами
C++ Builder Диалог между двумя приложениями
C++ Тоннель между двумя хостами
Различия между двумя циклами C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,927
Завершенные тесты: 1
19.07.2016, 13:13     Матрица перехода между двумя системами координат в 2D #2
Во-первых, совпадает ли основание (нулевая точка) у этих двух координатных систем? Если да, то матрицу перехода надо будет расширить до однородных координат (на самом деле они-то как раз неоднородные, но такова терминология), если нет, достаточно будет одной точки.
Во-вторых, никакой тригонометрии и множественных решений не требуется, всё выполняется обычными линейными преобразованиями.
Vlad222222
1 / 1 / 0
Регистрация: 16.07.2013
Сообщений: 42
19.07.2016, 14:51  [ТС]     Матрица перехода между двумя системами координат в 2D #3
Nick Alte, нет, нулевая точка не совпадает.

Из этой матрицы для 2 точек получается 4 уравнения и 3 неизвестных.
Наверное можно решить проще, но как?
Миниатюры
Матрица перехода между двумя системами координат в 2D  
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,927
Завершенные тесты: 1
19.07.2016, 20:27     Матрица перехода между двумя системами координат в 2D #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Получается 2 линейных уравнения с 3 неизвестными для одной точки и 2 уравнения с теми же 3 неизвестными для второй, более, чем достаточно. Принимаем синусы-косинусы за независимые величины (то есть, сам угол не ищем), решаем систему из 3 любых уравнений и имеем результат. Если 4 уравнение будет противоречить решению, то точки взяты неправильно (да, это возможно).
Решение системы из 3 линейных уравнений - дело довольно-таки простое, есть даже готовые формулы с детерминантом и минорами.
Vlad222222
1 / 1 / 0
Регистрация: 16.07.2013
Сообщений: 42
20.07.2016, 11:35  [ТС]     Матрица перехода между двумя системами координат в 2D #5
Отлично, всё получилось, может кому пригодится:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <eigen3/Eigen/Dense>
 
using namespace Eigen;
using namespace std;
 
int main()
{
    float x1{-5}, y1{15}, x2{25}, y2{-5}, x1_new{-15*sqrt(2)}, y1_new{-10*sqrt(2)}, x2_new{10*sqrt(2)}, y2_new{-5*sqrt(2)};
 
    //https://eigen.tuxfamily.org/dox/group__TutorialLinearAlgebra.html
    //http://stackoverflow.com/questions/3276341/solving-a-system-of-equations-programmably
 
    Matrix4f A;
    Vector4f b;
 
    A << x1_new, -y1_new, 1, 0,
            y1_new, x1_new, 0, 1,
            x2_new, -y2_new, 1, 0,
            y2_new, x2_new, 0, 1;
 
    b << x1, y1, x2, y2;
 
    cout << "Here is the matrix A:\n" << A << endl;
    cout << "Here is the vector b:\n" << b << endl;
    Vector4f x = A.colPivHouseholderQr().solve(b);
    cout << "The solution is:\n" << x << endl;
    cout << "ang " << atan2(x[1], x[0])*180/M_PI ;
 
    return 0;
}
Yandex
Объявления
20.07.2016, 11:35     Матрица перехода между двумя системами координат в 2D
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru