Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/10: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Brazil
0 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 8
1

Поворот фигуры по часовой стрелке

28.01.2016, 11:56. Просмотров 1895. Ответов 49
Метки нет (Все метки)

Помогите вывести формулу для поворота фигуры на произвольный угол. У меня выходит одно уравнение с двумя неизвестными.
0
Миниатюры
Поворот фигуры по часовой стрелке  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2016, 11:56
Ответы с готовыми решениями:

Поворот массива на 90 градусов по часовой стрелке
Всем привет! Помогите найти ошибку, программа должна поворачивать целочисленный...

Поворот матрицы на 180 градусов по часовой стрелке
Нужна программа,которая повернет квадратную матрицу из N строк и N столбцов на...

Произвести "поворот" матрицы по часовой стрелке
Задание: Задан квадратный массив А из N строк и N столбцов. Произвести...

Повернуть массив на 90° по часовой стрелке
С помощью генератора случайных чисел заполните двумерный массив NxN числами в...

Повернуть матрицу по часовой стрелке
Что нужно сделать, чтобы повернуть матрицу по часовой стрелке?? если меняешь...

49
Ilot
Эксперт С++
1831 / 1189 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
28.01.2016, 12:05 2
Чему только учат в современных школах?
http://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{matrix} x' = x cos\alpha + y sin \alpha <br />
\\ <br />
y'= x sin\alpha - y cos \alpha <br />
\end{matrix}
0
vndtta
90 / 67 / 21
Регистрация: 17.10.2011
Сообщений: 235
Завершенные тесты: 1
28.01.2016, 12:21 3
https://ru.wikipedia.org/wiki/%D0%9C...BE%D0%B4%D0%B0

если поворачивать вокруг не нуля, то нужно делать 1)перенос в 0;2)поворот вокруг 0;3)перенос в исходную точку
1
Brazil
0 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 8
30.01.2016, 15:41  [ТС] 4
Вывел формулу для поворота с помощью радиус-вектора.
Ilot, у вас ошибка
0
Миниатюры
Поворот фигуры по часовой стрелке  
SergioO
168 / 184 / 90
Регистрация: 13.12.2015
Сообщений: 995
30.01.2016, 15:58 5
Brazil, лучше использовать матрицы.
любое преобразование можно (и нужно) представить в виде матрицы. умножили на матрицу - получили преобразование.
поворот
http://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{pmatrix} & cos a & sin a &0 \\   & -sin a & cos a &0\\  & 0 &0 &1 \end{pmatrix}
1
Brazil
0 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 8
30.01.2016, 16:14  [ТС] 6
SergioO, почитаю про матрицы. Сейчас я не знаю как работать с ними.
0
vndtta
90 / 67 / 21
Регистрация: 17.10.2011
Сообщений: 235
Завершенные тесты: 1
01.02.2016, 15:00 7
почитаю про матрицы. Сейчас я не знаю как работать с ними.
такая запись
http://www.cyberforum.ru/cgi-bin/latex.cgi?x'=xcos\theta-ysin\theta<br />
y'=xsin\theta+ycos\theta
эквивалентна
http://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{bmatrix} x' \\ y' \end{bmatrix}=\begin{bmatrix}cos\theta & -sin\theta\\sin\theta & cos\theta\end{bmatrix}\begin{bmatrix} x \\ y \end{bmatrix}

для двумерного варианта можно и формулами пользоваться, не так громоздко
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
01.02.2016, 20:18 8
Цитата Сообщение от Brazil Посмотреть сообщение
Ilot, у вас ошибка
Нет там ошибки.
0
Ilot
Эксперт С++
1831 / 1189 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
02.02.2016, 07:47 9
Цитата Сообщение от Brazil Посмотреть сообщение
Ilot, у вас ошибка
Верно. Писал по памяти.
http://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{matrix} x' = x cos\alpha + y sin \alpha <br />
\\ <br />
y'= y cos \alpha - x sin\alpha<br />
\end{matrix}
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
02.02.2016, 13:09 10
Цитата Сообщение от Ilot Посмотреть сообщение
Верно.
Что верно? У вас был рабочий пример.
0
Mr.X
Эксперт С++
3180 / 1707 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
02.02.2016, 14:11 11
Мне кажется, легче не мучиться, а представить точки фигуры комплексными числами. Тогда поворот этого хозяйства против часовой стрелки на угол phi будет результатом умножения каждой точки на комплексное число polar(1, phi).
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
02.02.2016, 14:29 12
Mr.X, это как?
0
Mr.X
Эксперт С++
3180 / 1707 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
02.02.2016, 15:32 13
Цитата Сообщение от castaway Посмотреть сообщение
Mr.X, это как?
Ну, при умножении комплексных чисел их модули перемножаются, а аргументы складываются.
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
02.02.2016, 15:56 14
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну, при умножении комплексных чисел их модули перемножаются, а аргументы складываются.
Ну в итоге то получается то же самое!?
0
Mr.X
Эксперт С++
3180 / 1707 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
02.02.2016, 16:14 15
Цитата Сообщение от castaway Посмотреть сообщение
Ну в итоге то получается то же самое!?
В смысле?
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
02.02.2016, 16:20 16
Цитата Сообщение от Mr.X Посмотреть сообщение
В смысле?
В смысле те же сложения и умножения. Только коэффициенты разные?
0
Mr.X
Эксперт С++
3180 / 1707 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
02.02.2016, 16:29 17
Цитата Сообщение от castaway Посмотреть сообщение
В смысле те же сложения и умножения.
Да ладно! Во-первых вместо двух координат каждой точки она у нас будет представлена одним комплексным числом. Во-вторых вместо умножения вектора на матрицу у нас умножение числа на число. В третьих, нам не надо знать матрицу поворота, по поводу которой тут возник целый философский спор, и люди целые страницы исписывали формулами убористым почерком, а нужно знать только функцию std::polar.
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
02.02.2016, 16:40 18
Цитата Сообщение от Mr.X Посмотреть сообщение
Во-первых вместо двух координат каждой точки она у нас будет представлена одним комплексным числом. Во-вторых вместо умножения вектора на матрицу у нас умножение числа на число.
Вы можете привести пример? Я плохо представляю то о чём вы говорите.
0
avgoor
1041 / 609 / 157
Регистрация: 05.12.2015
Сообщений: 1,732
02.02.2016, 16:56 19
Цитата Сообщение от Mr.X Посмотреть сообщение
Во-вторых вместо умножения вектора на матрицу у нас умножение числа на число.
Ну, посчитайте количество сложений и умножений для произведения двух комплексных чисел.
0
Mr.X
Эксперт С++
3180 / 1707 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
02.02.2016, 18:25 20
Цитата Сообщение от castaway Посмотреть сообщение
Вы можете привести пример?
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <algorithm>
#include <cmath>
#include <complex>
#include <functional>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
///////////////////////////////////////////////////////////////////////////////
typedef double                          T_coord;
typedef std::complex    < T_coord   >   T_point;
typedef std::vector     < T_point   >   T_figure;
typedef std::string                     T_str;
///////////////////////////////////////////////////////////////////////////////
void    print_figure_with_prompt
    (
        T_figure    const   &   figure,
        T_str       const   &   prompt
    )
{
    std::cout   <<  prompt
                <<  std::endl;
 
    std::copy
        (
            figure.begin                    (),
            figure.end                      (),
            std::ostream_iterator<T_point>  ( std::cout, "\n" )
        );
 
    std::cout   <<  std::endl;
}
///////////////////////////////////////////////////////////////////////////////
T_figure    get_figure_rotated_by_angle_in_degrees
    (
        T_figure    const   &   figure,
        T_coord                 angle
    )
{
   T_figure     res_fig;
   auto         rad_angle   =   angle / 180 * acos(-1);
 
   std::transform
        (
            figure.begin                (),
            figure.end                  (),
            std::back_inserter          ( res_fig ),
 
            std::bind                   (
                                            std::multiplies< T_point >  (),
                                            std::placeholders::_1,
                                            std::polar                  ( 1.0,  rad_angle )
                                        )
        );
 
   return   res_fig;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::cout   <<  "Points total: ";
    int     n   =   0;
    std::cin    >>  n;
 
    std::cout   <<  "Enter points as (1.2,3.4):"
                <<  std::endl;
 
    T_figure    figure(n);
 
    for( int  i{}; i < n; ++i )
    {
        std::cout   <<  "# "
                    <<  i + 1
                    <<  ": ";
 
        std::cin    >>  figure[i];
    }//for
 
    for(;;)
    {
        std::cout   <<  "rotation angle in degrees: ";
        T_coord     angle{};
        std::cin    >>  angle;
 
        print_figure_with_prompt
            (
                figure,
                "original figure"
            );
 
        auto    rotated_figure  =   get_figure_rotated_by_angle_in_degrees
                                        (
                                            figure,
                                            angle
                                        );
 
        print_figure_with_prompt
            (
                rotated_figure,
                "rotated figure"
            );
    }//for
}
1
02.02.2016, 18:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2016, 18:25

Вращать треугольник по часовой стрелке
Здравствуйте, буду признателен если поможете, т.к. математика не моя сильная...

Заполнить матрицу по часовой стрелке
Ввести массив B, что состоит с элементов А(10;10), начиная с правого верхнего...

Обход треугольника по часовой стрелке
Всем доброго дня, а кому-то вечера, итак суть задачи: есть координаты вершин...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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