Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992

Где найти код Transformation->Distort?

13.10.2016, 11:50. Показов 2555. Ответов 48

Студворк — интернет-сервис помощи студентам
Здравствуйте. Где найти код искажения текстуры, как будто он на поверхности коробки, т.е. в пространстве? Также эта операция аналогична операции Edit->Transform->Distort и трансформация как показано на рисунке. Выкладывайте, пожалуйста, код, если если он есть у кого-нибудь.
Миниатюры
Где найти код Transformation->Distort?   Где найти код Transformation->Distort?   Где найти код Transformation->Distort?  

Где найти код Transformation->Distort?   Где найти код Transformation->Distort?  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.10.2016, 11:50
Ответы с готовыми решениями:

Где в проекте найти сам код на c#?
Скачал программу, но не знаю где найти сам код на c#? То есть где автор прописывал что делать при нажатии на ту или иную кнопку? Вот...

Где найти код самой функции?
новичок в jquery когда встречается такой код <div class="btn_buy_step_2" onclick="oneClick(this);" />Перейти к оплате</div>где...

Не могу найти где править код
Добрый день всем! Столкнулся с проблемой, сайт на вордпрес 4.7.2 нужно сменить номер телефона, а он как-то хитро прописан. Понимаю что...

48
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
15.10.2016, 17:02
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от DemolitionMan Посмотреть сообщение
посмотрите какие я программы писал и определите мой уровень знаний.
Эт которые на форуме выкладывали?
Уровень - ninja.
Все же знают настоящего Гуру C++?
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
15.10.2016, 18:05
Цитата Сообщение от DemolitionMan Посмотреть сообщение
посмотрите какие я программы писал и определите мой уровень знаний.
На самом деле, дайте пару ссылок на свои программы. Хочу посмотреть.
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
15.10.2016, 19:42  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Уровень - ninja.
- что такое уровень ниньдзя? И кто настоящий Гуру C++?
0
15.10.2016, 19:58

Не по теме:

Цитата Сообщение от DemolitionMan Посмотреть сообщение
что такое уровень ниньдзя?
Уровень как у ниндзи
Цитата Сообщение от DemolitionMan Посмотреть сообщение
И кто настоящий Гуру C++?
Ниндзя же. :D

0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
15.10.2016, 20:07  [ТС]
Ниньдзя это сколько от 0 до 5 баллов? И от 0% до 100%?
Может Вы какой-нибудь толковый код посоветуете. А то все пустая болтовня идет и идет. Надоело уже.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
15.10.2016, 20:25
Цитата Сообщение от DemolitionMan Посмотреть сообщение
Может Вы какой-нибудь толковый код посоветуете.
А зачем? Вы толковый код всё-равно не поймёте, а бестолковый вам не нужен.
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
16.10.2016, 07:58  [ТС]
Цитата Сообщение от castaway Посмотреть сообщение
А зачем? Вы толковый код всё-равно не поймёте, а бестолковый вам не нужен.
- не оскорбляйте мою честь и достоинство. Оскорбления запрещены на форуме, понял? Если хочешь с темы слезть, то лучше так и скажи, тогда с форума уходи совсем. А по-оленевски или по-крысовски фразы кидать - это не по-мужски.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.10.2016, 22:08
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

Это упрощённый пример. Так сказать, "на блюдечке".
main.cpp
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <cstdint>
#include <memory>
#include <cmath>
 
#include "pixel_buffer.hpp"
 
enum {
    g_width     = 640,
    g_height    = 480
};
 
pixel_buffer_dib32  g_texture( 16, 16 );
pixel_buffer_dib32  g_buffer( g_width, g_height );
 
struct coord {
    double x, y;
    coord( double x, double y ) : x(x), y(y) {}
};
 
/// [url]http://stackoverflow.com/a/12919399[/url]
coord tform( int xI, int yI, coord * src, coord * dst ) {
    double ADDING = 0.001; // to avoid dividing by zero
 
    double xA = src[0].x;
    double yA = src[0].y;
 
    double xC = src[1].x;
    double yC = src[1].y;
 
    double xAu = dst[0].x;
    double yAu = dst[0].y;
 
    double xBu = dst[1].x;
    double yBu = dst[1].y;
 
    double xCu = dst[2].x;
    double yCu = dst[2].y;
 
    double xDu = dst[3].x;
    double yDu = dst[3].y;
 
    // Calcultations
    // if points are the same, have to add a ADDING to avoid dividing by zero
    if (xBu==xCu) xCu+=ADDING;
    if (xAu==xDu) xDu+=ADDING;
    if (xAu==xBu) xBu+=ADDING;
    if (xDu==xCu) xCu+=ADDING;
    double kBC = (yBu-yCu)/(xBu-xCu);
    double kAD = (yAu-yDu)/(xAu-xDu);
    double kAB = (yAu-yBu)/(xAu-xBu);
    double kDC = (yDu-yCu)/(xDu-xCu);
 
    if (kBC==kAD) kAD+=ADDING;
    double xE = (kBC*xBu - kAD*xAu + yAu - yBu) / (kBC-kAD);
    double yE = kBC*(xE - xBu) + yBu;
 
    if (kAB==kDC) kDC+=ADDING;
    double xF = (kAB*xBu - kDC*xCu + yCu - yBu) / (kAB-kDC);
    double yF = kAB*(xF - xBu) + yBu;
 
    if (xE==xF) xF+=ADDING;
    double kEF = (yE-yF) / (xE-xF);
 
    if (kEF==kAB) kAB+=ADDING;
    double xG = (kEF*xDu - kAB*xAu + yAu - yDu) / (kEF-kAB);
    double yG = kEF*(xG - xDu) + yDu;
 
    if (kEF==kBC) kBC+=ADDING;
    double xH = (kEF*xDu - kBC*xBu + yBu - yDu) / (kEF-kBC);
    double yH = kEF*(xH - xDu) + yDu;
 
    double rG = (yC-yI)/(yC-yA);
    double rH = (xI-xA)/(xC-xA);
 
    double xJ = (xG-xDu)*rG + xDu;
    double yJ = (yG-yDu)*rG + yDu;
 
    double xK = (xH-xDu)*rH + xDu;
    double yK = (yH-yDu)*rH + yDu;
 
    if (xF==xJ) xJ+=ADDING;
    if (xE==xK) xK+=ADDING;
    double kJF = (yF-yJ) / (xF-xJ); //23
    double kKE = (yE-yK) / (xE-xK); //12
 
    if (kJF==kKE) kKE+=ADDING;
    double xIu = (kJF*xF - kKE*xE + yE - yF) / (kJF-kKE);
    double yIu = kJF * (xIu - xJ) + yJ;
 
    return coord( xIu, yIu );
}
 
void on_paint() {
 
    /// bounds
    coord src[2] = { { 0, 0 }, { g_buffer.get_width(), g_buffer.get_height() } };
 
    /// destination quad
    coord dst[4] = {
        {                        -100, -100 },
        { g_buffer.get_width() - -500, -500 },
        { g_buffer.get_width() - -200, g_buffer.get_height() - -200 },
        {                        -100, g_buffer.get_height() - -100 } };
 
    /// transform...
    for ( int y = 0; y < g_buffer.get_height(); ++y )
    for ( int x = 0; x < g_buffer.get_width(); ++x ) {
        coord xy = tform( x, y, src, dst );
 
        /// rescale from window to texture coordinates...
        coord uv(
            std::trunc( xy.x / g_buffer.get_width()  * g_texture.get_width() ),
            std::trunc( xy.y / g_buffer.get_height() * g_texture.get_height() ) );
 
        /// get texel...
        uint32_t c = g_texture.get_pixel( uv.x, uv.y );
 
        /// set pixel...
        g_buffer.set_pixel( x, y, c );
    }
}
 
LRESULT CALLBACK g_wnd_proc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) {
    switch ( uMsg ) {
        case WM_KEYDOWN: {
            switch ( wParam ) {
                case VK_ESCAPE:
                    PostQuitMessage( 0 );
                    break;
            }
        } break;
 
        case WM_PAINT:
            PAINTSTRUCT ps;
            ::BeginPaint( hWnd, &ps );
            on_paint();
            g_buffer.blit( ps.hdc );
            ::EndPaint( hWnd, &ps );
            break;
 
        case WM_CLOSE:
        case WM_DESTROY:
            ::PostQuitMessage( 0 );
            break;
 
        default:
            return ::DefWindowProc( hWnd, uMsg, wParam, lParam );
    }
    return 0;
}
 
int main()
{
    g_buffer.clear( 255 );
 
    // generate checker texture with red border
    for ( int y = 0; y < g_texture.get_height(); ++y )
    for ( int x = 0; x < g_texture.get_width(); ++x ) {
        uint32_t c;
        if ( x == 0 || y == 0 || x == g_texture.get_width() - 1 || y == g_texture.get_height() - 1 ) {
            c = 0xff0000;
        } else {
            c = (x + y) & 1 ? 127 : 192;
            c |= c << 8;
            c |= c << 16;
        }
        g_texture.set_pixel( x, y, c );
    }
 
    WNDCLASS wc = {};
    wc.lpfnWndProc      = g_wnd_proc;
    wc.hInstance        = ::GetModuleHandle( NULL );
    wc.lpszClassName    = "test_cls";
    wc.hCursor          = ::LoadCursor( NULL, IDC_ARROW );
    wc.hbrBackground    = (HBRUSH)(COLOR_BTNFACE + 1);
    ::RegisterClass( &wc );
 
    HWND hWnd = ::CreateWindow(
        wc.lpszClassName, NULL, WS_POPUP /*| WS_VISIBLE*/,
        ::GetSystemMetrics( SM_CXSCREEN ) / 2 - g_width  / 2,
        ::GetSystemMetrics( SM_CYSCREEN ) / 2 - g_height / 2,
        g_width, g_height, NULL, NULL, wc.hInstance, NULL );
 
    ::ShowWindow( hWnd, SW_SHOW );
    ::UpdateWindow( hWnd );
 
    MSG msg;
    while ( ::GetMessage( &msg, NULL, 0, 0 ) ) {
        ::TranslateMessage( &msg );
        ::DispatchMessage( &msg );
    }
 
    ::DestroyWindow( hWnd );
    ::UnregisterClass( wc.lpszClassName, wc.hInstance );
    return 0;
}


pixel_buffer.hpp
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
#ifndef __PIXEL_BUFFER_HPP__
#define __PIXEL_BUFFER_HPP__
 
class pixel_buffer_dib32 final {
public:
    pixel_buffer_dib32( int width, int height ) :
        m_width( width ),
        m_height( height ),
        m_stride( (width * 4 + 3) / 4 * 4 ),
        m_ptr( new (std::nothrow) uint8_t [m_stride * m_height] )
    {
        ZeroMemory( &m_bi, sizeof( BITMAPINFO ) );
        m_bi.bmiHeader.biSize           = sizeof( BITMAPINFOHEADER );
        m_bi.bmiHeader.biWidth          = m_width;
        m_bi.bmiHeader.biHeight         = -m_height;
        m_bi.bmiHeader.biPlanes         = 1;
        m_bi.bmiHeader.biBitCount       = 32;
        m_bi.bmiHeader.biCompression    = BI_RGB;
    }
 
    virtual ~pixel_buffer_dib32() {
        delete [] m_ptr;
    }
 
    void clear( uint8_t value = 0 ) const { memset( m_ptr, value, m_height * m_stride ); }
 
    explicit operator bool () const { return m_ptr != nullptr; }
 
    int get_width() const { return m_width; }
    int get_height() const { return m_height; }
    int get_stride() const { return m_stride; }
 
    uint8_t * get_ptr() const { return m_ptr; }
    uint8_t * get_row_ptr( int y ) const { return m_ptr + y * m_stride; }
    uint8_t * get_pix_ptr( int x, int y ) const { return get_row_ptr( y ) + x * 4; }
 
    void blit( HDC hdc ) {
        SetDIBitsToDevice( hdc, 0, 0, m_width, m_height, 0, 0, 0, m_height, m_ptr, &m_bi, DIB_RGB_COLORS );
    }
 
    uint32_t get_pixel( int x, int y ) {
        if ( x < 0 || x >= m_width || y < 0 || y >= m_height ) return 0xffffff;
        return *reinterpret_cast<uint32_t *>( get_pix_ptr( x, y ) );
    }
 
    void set_pixel( int x, int y, uint32_t color ) {
        if ( x < 0 || x >= m_width || y < 0 || y >= m_height ) return;
        *reinterpret_cast<uint32_t *>( get_pix_ptr( x, y ) ) = color;
    }
 
private:
    int         m_width;
    int         m_height;
    int         m_stride;
    uint8_t *   m_ptr;
    BITMAPINFO  m_bi;
};
 
#endif // __PIXEL_BUFFER_HPP__


Цитата Сообщение от DemolitionMan Посмотреть сообщение
- не оскорбляйте мою честь и достоинство. Оскорбления запрещены на форуме, понял?
Понял.
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.10.2016, 22:11
Забыл выложить пример работы программы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.10.2016, 22:11
Помогаю со студенческими работами здесь

где найти код элемента стилей?
Здравствуйте.. Я не програмист.. Но любитель! Кусочки кода где нибуть повырезать и сделать что нибудь свое творческое)) С...

Где найти php-код создания пользователей
Всем доброе утро! Проблема следующая... На сайте http://aspirant.mgou.ru/ при создании пользователя создаётся страница, написанная на...

Где можно найти код реализации библиотеки STL
Вот хочу я, например, проверить, функция std::swap() делает ли проверку на попытку обмена объекта с самим собой. Как/где я могу...

Найти, в каком из файлов и где находится указанный код
Добрый вечер! Не могу разобраться с кодом нахождения некоторых файлов! Необходимо подредактировать код и вставить другую ссылку на...

Где найти код драйвера для контроллера PL 2303?
очень нужен код драйвера для контроллера PL 2303... просто посмотреть...


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

Или воспользуйтесь поиском по форуму:
49
Ответ Создать тему
Новые блоги и статьи
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 через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru