Форум программистов, компьютерный форум CyberForum.ru

графические примитивы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.79
Red_Shoeheart
0 / 0 / 0
Регистрация: 17.03.2010
Сообщений: 12
31.03.2010, 09:43     графические примитивы #1
люди добрые и знающие, как с помощью графических примитивов отрисовать сложный рисунок(имеется ряд кривых, неподдающихся анализу с помощью стандартных функций) и наложить на некоторые элементы анимацию?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vorona
Peace 2 all shining faces
 Аватар для Vorona
660 / 522 / 44
Регистрация: 05.03.2010
Сообщений: 1,256
31.03.2010, 22:36     графические примитивы #2
какой компилятор и что именно сделать нужно?)
Red_Shoeheart
0 / 0 / 0
Регистрация: 17.03.2010
Сообщений: 12
01.04.2010, 23:12  [ТС]     графические примитивы #3
Vorona, компилятор - борланд, тройка (с досовским интерфейсом)

буду благодарен если объясните хотя бы запуск графического режима и методы реализации анимации
Vorona
Peace 2 all shining faces
 Аватар для Vorona
660 / 522 / 44
Регистрация: 05.03.2010
Сообщений: 1,256
02.04.2010, 00:06     графические примитивы #4
нужен файл EGAVGA.BGI в директории, откуда запускаешь Борланд и откуда собираешься запускать *.exe файл
библиотека: graphics.h
вот примерно все, необходимое для работы в графическом режиме
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
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <graphics.h>
#include <dos.h>
 
int main(){
    clrscr();
 
    int gdriver = DETECT, gmode, errorcode;
    initgraph(&gdriver, &gmode, "");
 
    errorcode = graphresult();
    if (errorcode != grOk){
        cout << "Graphics error: " << grapherrormsg(errorcode) << endl;
        cout << "Press any key to halt:";
        getch();
        exit(1);
    }
        
        //примитивное движение, но лучше разобраться сначала с простым рисованием
    int x = 0, radius = 20, midy = getmaxy();
        for(int i = 0; i < getmaxx(); i++){
        setcolor(YELLOW);
        circle(radius+i, midy/2, radius);
        delay(1000);
        setcolor(getbkcolor());
        circle(radius+i, midy/2, radius);
    }
        //------------------------------------------------------------------------
    
        getch();
    closegraph();  //освобождаешь память выделенную под графическую систему
                       //и восстанавливаешь экран, который был до initgraph();
        return 0;
}
открываешь help по graphics.h и смотришь там все функции для работы в граф-ом режиме, что непонятно, спрашивай, я немного поупражнялся в BCPP 3.1)

анимация реализовывается по-разному, к примеру, можно двигать картинку с определенным шагом и с таким же шагом вытирать все, что она за собой рисует
Red_Shoeheart
0 / 0 / 0
Регистрация: 17.03.2010
Сообщений: 12
02.04.2010, 00:17  [ТС]     графические примитивы #5
Vorona, пасибо, пойду танцевать с бубном
Red_Shoeheart
0 / 0 / 0
Регистрация: 17.03.2010
Сообщений: 12
05.05.2010, 17:10  [ТС]     графические примитивы #6
я так понял плавность анимаци зависит от частоты обновления, т.е. от частоты построения/затирания линий?
и еще, как лучше(и проще) отрисовать пружину?
Vorona
Peace 2 all shining faces
 Аватар для Vorona
660 / 522 / 44
Регистрация: 05.03.2010
Сообщений: 1,256
06.05.2010, 01:42     графические примитивы #7
Red_Shoeheart, всё верно, это осуществляется с помощью ф-ции delay(), которая принимает значение: миллисекунды; если ее убрать, то вы почти не уследите за картинкой, а вот совсем другая история, это мигание картинки во время ее прорисовки...
для того, что бы картинка прорисовывалась без всяких миганий и всего прочего, существует много методов решения этой проблемы, полезная литература: Андре Ламот - "Программирование игр"
насчет пружины, стоит поискать алгоритм прорисовки в и-нете и на его основе писать код)
или можно нарисовать кучу овалов (ф-ция ellipse()) друг на друге и стереть сверху и снизу по пол-овала
Red_Shoeheart
0 / 0 / 0
Регистрация: 17.03.2010
Сообщений: 12
06.05.2010, 20:16  [ТС]     графические примитивы #8
столько овалов будет, что просто звиздец)

а можно както обьединить несколько линий в группу и двигать сразу всю эту группу, а не по одной?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2010, 21:06     графические примитивы
Еще ссылки по теме:

графические библиотеки C++
C++ Создать программу, которая способна генерировать геометрические примитивы
Создать графические примитивы в C++ C++

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

Или воспользуйтесь поиском по форуму:
Vorona
Peace 2 all shining faces
 Аватар для Vorona
660 / 522 / 44
Регистрация: 05.03.2010
Сообщений: 1,256
06.05.2010, 21:06     графические примитивы #9
могу подсказать ф-ции:
imagesize(int left, int top, int right, int bottom); ___возвращает кол-во байт, необходимых для сохранения части экрана

getimage(int left, int top, int right, int bottom, void far* bitmap); ___сохраняет битовый образ части экрана

putimage(int left, int top, void far* bitmap, int op); ___выводит битовый образ на экран
а дальше, Ctrl+F1 на названии ф-ции и Help вам в руки, там все четко расписано, и достаточно этой информации чтоб использовать эти ф-ции
сам кроме хэлпа, рук и головы при работе с графикой ни чем не пользовался, т.к. не нашел подходящей литературы
но вот недавно наткнулся на небольшую статью про использование ф-ций при работе с графикой в Borland C++ 3.1, можете ею воспользоваться, там, кстати описаны вышеуказанные ф-ции
Вложения
Тип файла: pdf Graphics.pdf (364.4 Кб, 143 просмотров)
Yandex
Объявления
06.05.2010, 21:06     графические примитивы
Ответ Создать тему
Опции темы

Текущее время: 00:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru