Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
 Аватар для Александрик
6 / 6 / 7
Регистрация: 15.03.2012
Сообщений: 77

Вывод текста по изогнутой линий

18.04.2014, 19:13. Показов 1907. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую форумучан.Бьюсь над очередной задачей.Суть нужно вывести текст по контуру синусойды или изогнутой линий .Должно получится что то вроде как на картинке.

По теорий я понимаю что сделать это можно при помощи поворота системы координат для наклона каждого выводимого символа.Но как реализовать или же примеры я не понимаю....Прошу помощи.


р.с : Прикладываю: проект с синусойдой,"картинку как это задание примерно должно выглядеть"
Миниатюры
Вывод текста по изогнутой линий  
Вложения
Тип файла: rar Sin.rar (1.45 Мб, 3 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.04.2014, 19:13
Ответы с готовыми решениями:

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

Отрисовка изогнутой палки
Начальные данные: - есть некая прямая, известны координаты начала и конца (х1,y1) (x2,y2). - Есть некая точка, координаты также...

Рисование изогнутой стрелки
Здравствуйте, помогите, пожалуйста, нарисовать изогнутую линию со стрелой на конце, как на этом рисунке ниже. Ось рисовать и input...

12
Заблокирован
18.04.2014, 21:11
Использование gdiplus допускается?
Тогда кури здесь

Добавлено через 49 секунд
И здесь.
0
 Аватар для Александрик
6 / 6 / 7
Регистрация: 15.03.2012
Сообщений: 77
18.04.2014, 21:53  [ТС]
Emiliarge, Не желательно . Но вполне допускается .

Можно к примеру просто синусойду нарисовать словами(буквами).
Буду гуглить спасибо.


Р.С Если у когото есть задумки или проект пишите или аналогичные идеи как это сделать.
(Проэкт для опытов приложил выше)
0
Заблокирован
19.04.2014, 03:56
Мб в CreateFont есть такая возможность?
http://ntcoder.com/bab/tag/rot... reatefont/
0
 Аватар для Александрик
6 / 6 / 7
Регистрация: 15.03.2012
Сообщений: 77
19.04.2014, 10:24  [ТС]
Мб в CreateFont есть такая возможность?
http://ntcoder.com/bab/tag/rot... reatefont/
Вечером приду с работы гляну - попробую разобраться.Что там за код.И как его применить.


Суть примерно вот такая :

Нужно вывести текст повторяющий контур синусоиды. Используя поворот системы кординат функцией SetWorldTransform для неё нужна структура XFORM как вычислить формулу наклона(angle) ,чтобы подставить в параметры
C++
1
2
xf.eM22 = xf.eM11 = cos(angle);
xf.eM12 = -(xf.eM21 = sin(angle));
0
 Аватар для Александрик
6 / 6 / 7
Регистрация: 15.03.2012
Сообщений: 77
05.05.2014, 13:42  [ТС]
По сей день бьюсь над этой задачей. Форумучане выручайте

Вот то что набросал.


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
#include <windows.h>
 
LRESULT CALLBACK WindowProcess(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain(HINSTANCE hInst,
                   HINSTANCE hPrevInst,
                   LPSTR pCommandLine,
                   int nCommandShow){
    TCHAR className[] = L"Мой класс";
    HWND hWindow;
    MSG message;
    WNDCLASSEX windowClass;
 
    windowClass.cbSize        = sizeof(windowClass);
    windowClass.style         = CS_HREDRAW | CS_VREDRAW;
    windowClass.lpfnWndProc   = WindowProcess;
    windowClass.lpszMenuName  = NULL;
    windowClass.lpszClassName = className;
    windowClass.cbWndExtra    = NULL;
    windowClass.cbClsExtra    = NULL;
    windowClass.hIcon         = LoadIcon(NULL, IDI_WINLOGO);
    windowClass.hIconSm       = LoadIcon(NULL, IDI_WINLOGO);
    windowClass.hCursor       = LoadCursor(NULL, IDC_ARROW);
    windowClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    windowClass.hInstance     = hInst;
 
    if(!RegisterClassEx(&windowClass))
    {
        MessageBox(NULL, L"Не получилось зарегистрировать класс!", L"Ошибка", MB_OK);
        return NULL;
    }
    hWindow = CreateWindow(className,
                           L"Программа ввода символов",
                           WS_OVERLAPPEDWINDOW,
                           CW_USEDEFAULT,
                           NULL,
                           CW_USEDEFAULT,
                           NULL,
                           (HWND)NULL,
                           NULL,
                           HINSTANCE(hInst),
                           NULL
                          );
    if(!hWindow){
        MessageBox(NULL, L"Не получилось создать окно!", L"Ошибка", MB_OK);
        return NULL;
    }
    ShowWindow(hWindow, nCommandShow);
    UpdateWindow(hWindow);
    while(GetMessage(&message, NULL, NULL, NULL)){
        TranslateMessage(&message);
        DispatchMessage(&message);
    }
    return message.wParam;
}
 
LRESULT CALLBACK WindowProcess(HWND hWindow,UINT uMessage,WPARAM wParameter,LPARAM lParameter)
{
    HDC hDeviceContext;
    PAINTSTRUCT paintStruct;
    RECT rectPlace;
    HFONT hFont;
    static char text[2]={' ','\0'};
    switch (uMessage)
    {
    case WM_CREATE:
        MessageBox(NULL,
              L"Пожалуйста, вводите символы и они будут отображаться на экране!",
              L"ВНИМАНИЕ!!!", MB_ICONASTERISK|MB_OK);
        break;
    case WM_PAINT:
        hDeviceContext = BeginPaint(hWindow, &paintStruct);
        GetClientRect(hWindow, &rectPlace);
        SetTextColor(hDeviceContext, NULL);
        hFont=CreateFont(90,0,250,0,0,0,0,0,DEFAULT_CHARSET,0,0,0,0,L"Arial Bold");
        SelectObject(hDeviceContext,hFont);
        DrawText(hDeviceContext, (LPCWSTR)text, 1, &rectPlace, DT_SINGLELINE|DT_CENTER|DT_VCENTER);
        EndPaint(hWindow, &paintStruct);
        break;
    case WM_KEYDOWN:
        switch (wParameter)
        {
        case VK_HOME:case VK_END:case VK_PRIOR:
        case VK_NEXT:case VK_LEFT:case VK_RIGHT:
        case VK_UP:case VK_DOWN:case VK_DELETE:
        case VK_SHIFT:case VK_SPACE:case VK_CONTROL:
        case VK_CAPITAL:case VK_MENU:case VK_TAB:
        case VK_BACK:case VK_RETURN:
            break;
        default:
        text[0]=(char)wParameter;
        InvalidateRect(hWindow, NULL, TRUE);
        break;
        }break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWindow, uMessage, wParameter, lParameter);
    }
    return NULL;
}
Результат

Проект
Миниатюры
Вывод текста по изогнутой линий  
Вложения
Тип файла: rar Архив WinRAR.rar (240.3 Кб, 3 просмотров)
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
05.05.2014, 15:52
Я так понимаю что:
C++
1
CreateFont(90,0,250
Одна из этих цифр наклонила такст? Ну так делай в цикле всё это...
1
 Аватар для Александрик
6 / 6 / 7
Регистрация: 15.03.2012
Сообщений: 77
05.05.2014, 17:38  [ТС]
Одна из этих цифр наклонила текст?
Да.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HFONT CreateFont(int,    // высота шрифта
                 int,    // ширина символов
                 int,    // угол наклона букв
                 int,    // угол наклона строки
                 int,    // толщина букв («жирность»)
                 DWORD,  // курсив
                 DWORD,  // подчеркивание
                 DWORD,  // перечеркивание
                 DWORD,  // набор символов
                 DWORD,  // точность вывода
                 DWORD,  // точность отсечения
                 DWORD,  // качество вывода
                 DWORD,  // шаг между буквами
                 LPCTSTR // имя шрифта
                );
Как можно сделать цикл по проще? (хватит и 2х-3х букв, вывести в наклонном виде.)
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
05.05.2014, 18:44
Ну ты же уже дал формулу:
xf.eM22 = xf.eM11 = cos(angle);
xf.eM12 = -(xf.eM21 = sin(angle));
Вот по ней и строй. Т.е. грубо говоря, берёш кол-во символов в строке, цикл по ним, с учётом ширины символов выводиш. Логику на бумажке нарисуй, будет яснее, а потом уже в код переведёш.
0
 Аватар для Александрик
6 / 6 / 7
Регистрация: 15.03.2012
Сообщений: 77
05.05.2014, 19:44  [ТС]
Вот по ней и строй. Т.е. грубо говоря, берёш кол-во символов в строке, цикл по ним, с учётом ширины символов выводиш. Логику на бумажке нарисуй, будет яснее, а потом уже в код переведёш.
формула, кстати, не совсем корректна, т.к. помимо поворота нужен перенос каждой такой точки в начало координат и обратно,
Мозг полноценно меня послал.Понимаю что нужно сделать но реализовать и подкрутить это к проекту никак не могу.Есть примеры?

C++
1
InvalidateRect(hWindow, NULL, FALSE);//FALSE-TRUE
Миниатюры
Вывод текста по изогнутой линий  
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
05.05.2014, 20:24
Цитата Сообщение от Александрик Посмотреть сообщение
формула, кстати, не совсем корректна
Обоснование?
Цитата Сообщение от Александрик Посмотреть сообщение
т.к. помимо поворота нужен перенос каждой такой точки в начало координат
Это не обоснование, а дополнение к задаче.

Цитата Сообщение от Александрик Посмотреть сообщение
Понимаю что нужно сделать
Ещё раз для тех кто не смотрел Mr.Freeman'a в своё время: берёш листочек бумаги и прогоняеш условие задачи и как это могло бы быть релизовано исходя из тех инструментов которые ты имееш.

Примеры не нужны, ты либо программист(т.е. подразумевается что ты должен быть createrom), либо иди картошку капай.
0
 Аватар для Александрик
6 / 6 / 7
Регистрация: 15.03.2012
Сообщений: 77
05.05.2014, 20:31  [ТС]
Да что то вроде дополнения но сколняюсь к упрощению задачи.
Как писал выше.Надо просто отдахнуть,голова гудит и не соображает и так за сегодня 4 Полноценных проектика" сделал. Завтро сяду.Со здравым смыслом разберусь что к чему.

Отпишу по результатам.
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
05.05.2014, 20:45
Вот ты сам и ответил на вопрос о том "почему не можеш сделать"... Потому что не распределяеш время, мы люди, а не ослы и не быки, если пашеш как конь - ну вот и будеш на него похожим. (унылая правда жизни в том что как раз таки многие так и живут, думая что чем больше будут пахать - тем лучше будет результат, однако это не так, т.к. противоречит самому принципу развития, как говорилось в интервью с Стивом Джобосом - "надо не 24 часа работать, а головой")
Второй момент: последовательность действий. Ты вот решил сразу всё в кучу свалить и думаеш что всё получится - так не бывает, длинный путь начинается с первого шага - значит что нужно по маленьку, не спеша, с толком, чувством, расстановкой. Сделай в несколько этапов, сначала в одну строку выведи все символы строки, потом добавь в цикл формулу по наклону букв, а потом можно и оси Y скакать.
Если не получается - съеш пирог (с к.ф. "Люди в чёрном 3") (имеется в виду что сам настрой важен и то куда ты направляеш энергию, иногда нужно просто с другой стороны подойти чтоб "открутить гайку", а не ломать ворота)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.05.2014, 20:45
Помогаю со студенческими работами здесь

Вывод линий
Всем привет! Дайте пожайлуста исходник Delphi вывода линий на экран или линии. Пробую через DeviceInterface.Clear но посадка FPS просто...

Вывод линий ёлочкой
имееться код который выводит линии одинакового размера &lt;html&gt; &lt;head&gt; &lt;title&gt;for&lt;/title&gt; &lt;meta...

Вывод цветных линий
Необходимо вывести 16 цветных линий,толщиной по n пикселей

Потоки. Вывод горизонтальных линий
Здравствуйте уважаемые эксперты! Есть задача: Все потоки вывод на экран горизонтальную линию/ Вот получившийся код:unit Unit1; ...

Вывод координат линий уровня
Можно ли вывести координаты для определённых линий уровня для функции f(r,z), на прямоугольной координатной сетке, построенной с помощью...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
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
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru