Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
 Аватар для kcalbCube
15 / 13 / 4
Регистрация: 16.08.2018
Сообщений: 125

Вращение Треугольника по часовой стрелке

15.09.2018, 13:07. Показов 5184. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть вот такие переменные:
C++
1
2
3
    int x1_1 = 320; int x2_1 = 300; int y1_1 = 200; int y2_1 = 240;
    int x1_2 = 300; int x2_2 = 340; int y1_2 = 240; int y2_2 = 240;
    int x1_3 = 340; int x2_3 = 320; int y1_3 = 240; int y2_3 = 200;
Они нужны для вывода треугольника (см. картинку: )
И мне нужна формула для вращения треугольника по своей оси.
Пожалуйста, скиньте код.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.09.2018, 13:07
Ответы с готовыми решениями:

Заданы координаты вершин треугольника. Вывести их в порядке обхода треугольника по часовой стрелке
Заданы координаты вершин треугольника.Вывести их в порядке обхода треугольника по часовой стрелке. Вот код, но правильный ли он?! ...

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

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

12
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
15.09.2018, 13:22
http://ru.wikipedia.org/wiki/%... 0%B8%D0%B5
0
 Аватар для kcalbCube
15 / 13 / 4
Регистрация: 16.08.2018
Сообщений: 125
15.09.2018, 14:19  [ТС]
Может просто скинете код?
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
15.09.2018, 14:22
Нужно умножать на матрицу поворота.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
15.09.2018, 15:08
woldemas, точнее на матрицу переноса фигуры в начало координат, затем на матрицу поворота, затем на матрицу переноса на прежнее место.
0
 Аватар для TButton
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
16.09.2018, 06:40
Цитата Сообщение от kcalbCube Посмотреть сообщение
И мне нужна формула для вращения треугольника по своей оси.
Пожалуйста, скиньте код.
ok
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
// HelloWorld.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//
 
#include "pch.h"
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <cmath>
 
struct vec2 {
    float x;
    float y;
    vec2() {};
    vec2(float X, float Y) {
        x = X;
        y = Y;
    }
};
 
vec2 coord1(50,50), coord2(100,50), coord3(50,100);
 
vec2 Rotate(vec2 pointR, vec2 vector, float a) {
    float R = sqrt(pow(vector.x - pointR.x, 2) + pow(vector.y - pointR.y, 2));
    vec2 vec1;
    vec1.x = R * cos(a) + pointR.x;
    vec1.y = R * sin(a) + pointR.y;
    return vec1;
}
 
int main()
{
    POINT op;
    HWND hWnd = GetConsoleWindow();
    HDC hDC = GetDC(hWnd);
    SelectObject(hDC, GetStockObject(WHITE_PEN));
 
    //***Rotate////***
    int i = 0;
    while (1) {
        i++;
        coord1 = Rotate(vec2(50, 50), coord1, i);
        coord2 = Rotate(vec2(50, 50), coord2, i);
        coord3 = Rotate(vec2(50, 50), coord3, i);
 
        MoveToEx(hDC, coord1.x, coord1.y, &op);
        LineTo(hDC, coord1.x, coord1.y);
        LineTo(hDC, coord2.x, coord2.y);
        LineTo(hDC, coord3.x, coord3.y);
        LineTo(hDC, coord1.x, coord1.y);
    }
 
    ReleaseDC(hWnd, hDC);
    std::cin.get();
    
    _getch();
    return 0;
}
 
// Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
// Отладка программы: F5 или меню "Отладка" > "Запустить отладку"
 
// Советы по началу работы 
//   1. В окне обозревателя решений можно добавлять файлы и управлять ими.
//   2. В окне Team Explorer можно подключиться к системе управления версиями.
//   3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
//   4. В окне "Список ошибок" можно просматривать ошибки.
//   5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
//   6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.
0
 Аватар для kcalbCube
15 / 13 / 4
Регистрация: 16.08.2018
Сообщений: 125
16.09.2018, 09:22  [ТС]
Мне это НЕ подходит.
Я пишу на SDL а не на WinApi, Я его не понимаю.
Для отображения нужно 4 координаты
x начала линии, y начала линии и x конца линии и y конца линии.
И я не понимаю как вообще WinApi рисует линии по двум координатам.
0
 Аватар для TButton
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
16.09.2018, 09:37
Цитата Сообщение от kcalbCube Посмотреть сообщение
Я пишу на SDL а не на WinApi, Я его не понимаю.
Спасибо, за информацию

Цитата Сообщение от kcalbCube Посмотреть сообщение
Для отображения нужно 4 координаты
Нет, для отображения треуголиника, нужно 3 координаты, а для четырёхугольника - 4. А то, как ваш треугольник рисуется, на sdl, решать вам.

Цитата Сообщение от kcalbCube Посмотреть сообщение
И я не понимаю как вообще WinApi рисует линии по двум координатам.
Для начала задаётся вектор того, от куда рисовать(по умолчанию 0,0). Затем с помощью LineTo, задается второй вектор. Проводится прямая от точки до точки. Затем, рисуется третья точка, от второй к третьей проводится прямая и.т.д.

Цитата Сообщение от kcalbCube Посмотреть сообщение
Мне это НЕ подходит.
Почему же? Функцию, которая вращает вам точку, уже есть. Если вам не подходит WinAPI, то копируйте её в свой проект SDL.
вот вектор
C++
1
2
3
4
5
6
7
8
9
struct vec2 {
    float x;
    float y;
    vec2() {};
    vec2(float X, float Y) {
        x = X;
        y = Y;
    }
};
вот ф-я вращения
C++
1
2
3
4
5
6
7
vec2 Rotate(vec2 pointR, vec2 vector, float a) {
    float R = sqrt(pow(vector.x - pointR.x, 2) + pow(vector.y - pointR.y, 2));
    vec2 vec1;
    vec1.x = R * cos(a) + pointR.x;
    vec1.y = R * sin(a) + pointR.y;
    return vec1;
}
Первый параметр - точка вращения(vec2 pointR), второй патаметр - корды той точки(vec2 vector), что надо вращать, третий параметр - угол вращения(float a). Ф-я возвращает "вращённую" точку.

Вам остается применить эту ф-ю ко всем вашим точкам, и нарисовать треугольник.
0
 Аватар для kcalbCube
15 / 13 / 4
Регистрация: 16.08.2018
Сообщений: 125
16.09.2018, 09:42  [ТС]
Извиняюсь, не заметил что в coord храниться сразу два числа,
Но всё равно,
Можете скинуть тупо функцию для поворота Всей этой кучи переменных?
C++
1
2
3
    int x1_1 = 320; int x2_1 = 300; int y1_1 = 200; int y2_1 = 240;
    int x1_2 = 300; int x2_2 = 340; int y1_2 = 240; int y2_2 = 240;
    int x1_3 = 340; int x2_3 = 320; int y1_3 = 240; int y2_3 = 200;
Вот так выглядит отображение:
C++
1
2
3
4
        
SDL_RenderDrawLine(renderer, x1_1, y1_1, x2_1, y2_1);
SDL_RenderDrawLine(renderer, x1_2, y1_2, x2_2, y2_2);
SDL_RenderDrawLine(renderer, x1_3, y1_3, x2_3, y2_3);
Добавлено через 2 минуты
Я это писал после того как увидел ваш новый комментарий
0
 Аватар для TButton
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
16.09.2018, 10:03
Цитата Сообщение от kcalbCube Посмотреть сообщение
Можете скинуть тупо функцию для поворота Всей этой кучи переменных?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//ваша каша
int x1_1 = 320; int x2_1 = 300; int y1_1 = 200; int y2_1 = 240;
int x1_2 = 300; int x2_2 = 340; int y1_2 = 240; int y2_2 = 240;
int x1_3 = 340; int x2_3 = 320; int y1_3 = 240; int y2_3 = 200;
//преобразововываем в нормальный вид
vec2 vector1(x1_1, y1_1), vector2(x2_1, y2_1), vector3(x1_2, y1_2), vector4(x2_2, y2_2), vector5(x1_3, y1_3), vector6(x2_3, y2_3);
 
vec2 Rotate(vec2 pointR, vec2 vector, float a) { //моя ф-я
    float R = sqrt(pow(vector.x - pointR.x, 2) + pow(vector.y - pointR.y, 2));
    vec2 vec1;
    vec1.x = R * cos(a) + pointR.x;
    vec1.y = R * sin(a) + pointR.y;
    return vec1;
}
 
void ROTATE(vec2 pointR, float angle) { //pointR - точка вращения, angle - угол вращения
    vector1 = Rotate(pointR, vector1, angle);
    vector2 = Rotate(pointR, vector2, angle);
    vector3 = Rotate(pointR, vector3, angle);
    vector4 = Rotate(pointR, vector4, angle);
    vector5 = Rotate(pointR, vector5, angle);
    vector6 = Rotate(pointR, vector6, angle);
}
Чисто, судя по вашей ф-и рисования разобрался, как это работает. Даже не знаю, зачем такой огород из 6 векторов... Можно бы было с моим кодом вот так сделать, и все бы работало

C++
1
2
3
SDL_RenderDrawLine(renderer, coord1.x, coord1.y, coord2.x, coord2.y);
SDL_RenderDrawLine(renderer, coord2.x, coord2.y, coord3.x, coord3.y);
SDL_RenderDrawLine(renderer, coord3.x, coord3.y, coord1.x, coord1.y);
Кстати да, смотрите в сторону glm
0
 Аватар для kcalbCube
15 / 13 / 4
Регистрация: 16.08.2018
Сообщений: 125
16.09.2018, 10:45  [ТС]
...
0
 Аватар для kcalbCube
15 / 13 / 4
Регистрация: 16.08.2018
Сообщений: 125
16.09.2018, 11:07  [ТС]
Я протестил:

0
 Аватар для kcalbCube
15 / 13 / 4
Регистрация: 16.08.2018
Сообщений: 125
16.09.2018, 11:12  [ТС]
Перетестил:

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.09.2018, 11:12
Помогаю со студенческими работами здесь

Поворот фигуры по часовой стрелке
Помогите вывести формулу для поворота фигуры на произвольный угол. У меня выходит одно уравнение с двумя неизвестными.

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

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

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

Повернуть матрицу по часовой стрелке на 90 градусов
Помогите, пожалуйста, срочно!! Дан массив N × M. Требуется повернуть его по часовой стрелке на 90 градусов. Входные данные На...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru