Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
 Аватар для Doksim
57 / 57 / 10
Регистрация: 08.12.2013
Сообщений: 257

Почему треугольник не поворачивается? :(

16.12.2013, 19:43. Показов 804. Ответов 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
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
104
105
#include <windows.h>
#include <windowsx.h>
#include <math.h>
 
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
 
POINT pt[ 3 ], M;
float AM, BM, CM;
 
float angle = 0;
const float pi = 3.14159;
 
int WINAPI WinMain( HINSTANCE hI , HINSTANCE , LPSTR , int )
{
    hI;
    WNDCLASSEX wc;
    HACCEL haccel;
    MSG msg;
    ZeroMemory( &wc , sizeof( wc ) );
 
    wc.lpfnWndProc   = WndProc;
    wc.hbrBackground = CreateSolidBrush( RGB( 236, 233, 216 ) );
    wc.lpszClassName = "testwnd";
    wc.hInstance     = hI;
    wc.hCursor       = LoadCursor( NULL , IDC_ARROW );
    wc.hIcon         = LoadIcon( hI , "eye" );
    wc.hIconSm       = LoadIcon( hI , "eye" );
    wc.cbSize        = sizeof( WNDCLASSEX );
    wc.lpszMenuName  = "Menu";
    RegisterClassEx( &wc );
 
    int x = ( GetSystemMetrics( SM_CXSCREEN ) / 2 ) - 317 ,
    y = ( GetSystemMetrics( SM_CYSCREEN ) / 2 ) - 224;
 
    HWND hwnd = CreateWindowEx( 0 , "testwnd" , "Треугольник" ,
    WS_BORDER | WS_OVERLAPPED | WS_CAPTION
    | WS_SYSMENU | WS_MINIMIZEBOX ,
    x , y , 635 , 449 , NULL , NULL , hI , NULL );
 
 
    ShowWindow( hwnd , SW_SHOWNORMAL );
    
    M.x = ( pt[ 0 ].x + pt[ 1 ].x + pt[ 2 ].x ) / 3;
    M.y = ( pt[ 0 ].y + pt[ 1 ].y + pt[ 2 ].y ) / 3;
                               
    AM = (int)sqrt( pow( float( pt[ 0 ].x - M.x ), 2 ) + pow( float( pt[ 0 ].y - M.y ), 2 ) );
    BM = (int)sqrt( pow( float( pt[ 1 ].x - M.x ), 2 ) + pow( float( pt[ 1 ].y - M.y ), 2 ) );
    CM = (int)sqrt( pow( float( pt[ 2 ].x - M.x ), 2 ) + pow( float( pt[ 2 ].y - M.y ), 2 ) );
                               
    pt[ 0 ].x = 100; pt[ 0 ].y = 100;
        pt[ 1 ].x = 200; pt[ 1 ].y = 250;
        pt[ 2 ].x = 300; pt[ 2 ].y = 100;
        
    while( true )
    {
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))  
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
        
        pt[ 0 ].x = (int)( AM * cos( angle / 180 * pi ) + 100 ); pt[ 0 ].y = (int)( AM * sin( angle / 180 * pi ) + 100 );
        pt[ 1 ].x = (int)( BM * cos( angle / 180 * pi ) + 200 ); pt[ 1 ].y = (int)( BM * sin( angle / 180 * pi ) + 250 );
        pt[ 2 ].x = (int)( CM * cos( angle / 180 * pi ) + 300 ); pt[ 2 ].y = (int)( CM * sin( angle / 180 * pi ) + 100 );
                           
        Sleep( 20 );        
        angle++;
        if( angle >= 360 )angle = 0;
        InvalidateRect( hwnd , NULL, TRUE );
        
        if (msg.message==WM_QUIT) break;
    }   
 
    return msg.wParam;
}
 
LRESULT CALLBACK WndProc( HWND hwnd , UINT msg , WPARAM wParam , LPARAM lParam )
{
        switch( msg )
        {
                case WM_CREATE:
                     {
                               break;
                     }                  //
                case WM_PAINT:
                {
                        PAINTSTRUCT ps;
                        HDC hdc = BeginPaint( hwnd , &ps );
                     
                        Polygon( hdc, pt, 3 );
                     
                        EndPaint( hwnd , &ps );
                        break;
                }
                
                case WM_DESTROY:       //
                {
                     PostQuitMessage( 0 );
                     break;
                }
                default:
                        return DefWindowProc( hwnd , msg , wParam , lParam );
        }
        return 0;
}
треугольник почему то не вертится
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.12.2013, 19:43
Ответы с готовыми решениями:

OpenGl QT Не работает поворот, поворачивается рывками или вообще не поворачивается
.h #ifndef WIDGET_H #define WIDGET_H #include &lt;QtOpenGL&gt; #include &lt;QGLWidget&gt; namespace Ui { class Widget;

Неправильно игрок поворачивается
Добрый день! Я заметил эту ошибку ещё вчера. Вчера, я делал передвижение и поворот игрока( игрок нажал влево, игрок повернулся влево),...

Изображение неправильно поворачивается
Здравствуйте, у меня такая проблема. Пишу игру, решил, что танк может поворачиваться не только на 0, 90, 180, 270 градусов. Изображение...

5
 Аватар для DENIS94
24 / 24 / 6
Регистрация: 12.04.2013
Сообщений: 122
16.12.2013, 23:09
Могу помочь реализовать на OpenGL Там правильное использование glRotatef(,,,) любое вращение тебе обеспечит.
1
34 / 32 / 5
Регистрация: 29.08.2012
Сообщений: 84
Записей в блоге: 1
17.12.2013, 23:30
Doksim, я бы на твоем месте сделал все через таймер, все должно легко получиться
0
 Аватар для Doksim
57 / 57 / 10
Регистрация: 08.12.2013
Сообщений: 257
18.12.2013, 12:11  [ТС]
Цитата Сообщение от DENIS94 Посмотреть сообщение
Могу помочь реализовать на OpenGL Там правильное использование glRotatef(,,,) любое вращение тебе обеспечит.
все норм, ошибку нашел, у меня другая проблемма теперь..
0
 Аватар для DENIS94
24 / 24 / 6
Регистрация: 12.04.2013
Сообщений: 122
19.12.2013, 13:39
Какая?
0
 Аватар для Doksim
57 / 57 / 10
Регистрация: 08.12.2013
Сообщений: 257
19.12.2013, 15:01  [ТС]
я уже и не помню)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.12.2013, 15:01
Помогаю со студенческими работами здесь

Не так поворачивается объект
Пытаюсь повернуть объект относительно себя, но он поворачивается ко мне не &quot;носом&quot;, а боком. Помогите пожалуйста, мучаюсь, не знаю как...

Почему треугольник не выводится?
Помогите с кодом. я не понимаю почему пирамида не выводится. Только неделю назад начал учить С ++, и задали сделать такую пирамиду....

Если Ибм Не Поворачивается Лицом...
вендор глубоко плюнул на разработчиков, создавая эклипс версию Lotus Notes, и умудрившись сделать кроссплатформенный эклипс виндовзонли ...

Создать базовый класс Треугольник с 2 наследниками: Равносторонний треугольник, Прямоугольный треугольник
Задание звучит так: Нужно создать базовый класс Треугольник с двумя наследующими его классами - равносторонний треугольник (·...

Линия не поворачивается на 90 градусов и становится длиннее
Пытаюсь повернуть линию(начерчена черным) на 90 градусов, в итоге получается вот такая линия(начерчена синим). Не понимаю,что не так, но...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru