С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 07.08.2016
Сообщений: 28
1

Не получается воспроизвести пример из книги по графике на С

19.11.2016, 09:03. Показов 1673. Ответов 8
Метки си (Все метки)

Author24 — интернет-сервис помощи студентам
// draw move initgr как неопознанные, можно как-нибудь запустить данный код?
Пользуюсь Visual Studio проект Win 32
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
main()
{
    float xA, yA, xB, yB, xC, yC, xD, yD, xxA, yyA, xxB, yyB, xxC, yyC, xxD, yyD, p, q;
    int i;
    p = 0.95;
    q = 1.0 - p;
    xA = 2.0;
    xB = 8.0;
    xC = 8.0;
    xD = 2.0;
    yA = 0.5;
    yB = 0.5;
    yC = 6.5;
    yD = 6.5;
    initgr();
    for (i = 0; i < 50; i++)
    {
        move(xA, yA);
        draw(xB, yB);
        draw(xC, yC);
        draw(xD, yD);
        draw(xA, yA);
        xxA = p * xA + q * xB;
        yyA = p * yA + q * yB;
        xxB = p * xB + q * xC;
        yyB = p * yB + q * yC;
        xxC = p * xC + q * xD;
        yyC = p * yC + q * yD;
        xxD = p * xD + q * xA;
        yyD = p * yD + q * yA;
        xA = xxA;
        xB = xxB;
        xC == xxC;
        xD = xxD;
        yA = yyA;
        yB = yyB;
        yC = yyC;
        yD = yyD;
    }
    endgr();
}
Пример взят из:
http://sci.sernam.ru/book_graph.php?id=3
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.11.2016, 09:03
Ответы с готовыми решениями:

Не получается воспроизвести пример с сайта
Доброго времени суток. Подскажите, пожалуйста новичку - что я делаю не так ? Нашел пример в...

Не получается вывести Bitmap (пример из книги)
Доброго времени суток. Учу ВинАПИ по книге &quot;Азбука программирования в Вин32 АПИ&quot; П.В. Румянцев ...

Не получается воссоздать пример из книги Б.Керниган Д.Ритчи
Не могу разобраться, почему код приведённый из книги в примере выполняется бесконечно и при этом не...

Можно пожалуйста воспроизвести данный пример
Двухмерные массивы По матрице A(10,10) построить массив B(10) следующим образом: B(J) присвоить...

8
53 / 43 / 22
Регистрация: 29.05.2016
Сообщений: 214
19.11.2016, 09:06 2
свой код покажи целиком
0
34 / 33 / 21
Регистрация: 14.11.2016
Сообщений: 141
19.11.2016, 10:13 3
Цитата из книги:
"Здесь объясняется, как программисты могут использовать плоттеры и другие графические устройства, без анализа подробностей их работы и без учета конкретных особенностей доступных устройств. Надеюсь, что читатель одобрит подобный приборно-независимый подход. В любом случае так можно избежать недоразумений, которые могут появиться при изучении конкретных программ и аппаратных реализаций."

Пояснение: вы сами выбираете, какую графическую систему использовать, главное что бы она имела описанные возможности: начать, переместить перо, нарисовать линию, закончить.

p.s.
Книга как динозавр, если не древнее.
А так, всегда читайте предисловие.
0
53 / 43 / 22
Регистрация: 29.05.2016
Сообщений: 214
19.11.2016, 12:42 4
newgraf.h
C
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef __NEWGRAF_H_
#define __NEWGRAF_H_
 
void initgr();
void move(float x, float y);
void draw(float x, float y);
void endgr();
 
extern float curr_x;
extern float curr_y;
 
#endif
newgraf.c
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
#include "newgraf.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
 
float curr_x;
float curr_y;
 
int width;
int height;
 
char * buff; // buffer for image
int coeff = 100; // coeff to multiply x and y
int bpp = 3; // bytes per pixel
 
void pixel(float x, float y) {
    int coor = (y * width + x) * bpp;
    switch (bpp) {
        case 1:
            buff[coor] = 0x0;
            break;
        case 3:
            buff[coor] = 0x0;
            buff[coor+1] = 0x0;
            buff[coor+2] = 0x0;
            break;
        case 4:
            buff[coor] = 0x0;
            buff[coor+1] = 0x0;
            buff[coor+2] = 0x0;
            buff[coor+3] = 0x0;
            break;  
        default:
            break;
    }
}
 
void initgr() {
    curr_x = 0;
    curr_y = 0;
    width = 9*coeff;
    height = 7*coeff;
    int size = width*height*bpp;
    buff = (char*) malloc(size);
    memset(buff, 0xFF, size);
}
 
void move(float x, float y) {
    curr_y = x;
    curr_y = y;
 
}
 
#define roundf(x) floor(x + 0.5f)
 
#define max(a,b) \
   ({ __typeof__ (a) _a = (a); \
       __typeof__ (b) _b = (b); \
     _a > _b ? _a : _b; })
 
void draw(float x, float y) {
    // [url]http://compgraphics.info/2D/DDA_line.php[/url] , немного адаптированно
    // (1) Целочисленные значения координат начала и конца отрезка, 
    // округленные до ближайшего целого
    int iX1 = roundf(x*coeff);
    int iY1 = roundf(y*coeff);
    int iX2 = roundf(curr_x*coeff);
    int iY2 = roundf(curr_y*coeff);
 
    // (2) Длина и высота линии
    int deltaX = abs(iX1 - iX2);
    int deltaY = abs(iY1 - iY2);
 
    // (3) Считаем минимальное количество итераций, необходимое
    // для отрисовки отрезка. Выбирая максимум из длины и высоты
    // линии, обеспечиваем связность линии
    int length = max(deltaX, deltaY);
// особый случай, на экране закрашивается ровно один пиксел
    if (length == 0)
    {
        pixel(iX1, iY1);
        return;
    }
 
      // (4) Вычисляем приращения на каждом шаге по осям абсцисс и ординат
      double dX = (x - curr_x) * coeff / length;
      double dY = (y - curr_y) * coeff / length;
 
      // (5) Начальные значения
      double xx = curr_x * coeff;
      double yy = curr_y * coeff;
 
      // Основной цикл
      length++;
      while (length--)
      {
            xx += dX;
            yy += dY;
            pixel(roundf(xx), roundf(yy));
      }
 
    curr_x = x;
    curr_y = y;
}
 
void endgr() {
    FILE *f;
    int i;
    unsigned char file[14] = {
        'B','M', // magic
        0,0,0,0, // size in bytes
        0,0, // app data
        0,0, // app data
        40+14,0,0,0 // start of data offset
    };
    unsigned char info[40] = {
        40,0,0,0, // info hd size
        0,0,0,0, // width
        0,0,0,0, // heigth
        1,0, // number color planes
        24,0, // bits per pixel
        0,0,0,0, // compression is none
        0,0,0,0, // image bits size
        0x13,0x0B,0,0, // horz resoluition in pixel / m
        0x13,0x0B,0,0, // vert resolutions (0x03C3 = 96 dpi, 0x0B13 = 72 dpi)
        0,0,0,0, // #colors in pallete
        0,0,0,0, // #important colors
        };
 
    int w=width;
    int h=height;
 
    int padSize  = (4-(w*bpp)%4)%4;
    int sizeData = w*h*bpp + h*padSize;
    int sizeAll  = sizeData + sizeof(file) + sizeof(info);
 
    file[ 2] = (unsigned char)( sizeAll    );
    file[ 3] = (unsigned char)( sizeAll>> 8);
    file[ 4] = (unsigned char)( sizeAll>>16);
    file[ 5] = (unsigned char)( sizeAll>>24);
 
    info[ 4] = (unsigned char)( w   );
    info[ 5] = (unsigned char)( w>> 8);
    info[ 6] = (unsigned char)( w>>16);
    info[ 7] = (unsigned char)( w>>24);
 
    info[ 8] = (unsigned char)( h    );
    info[ 9] = (unsigned char)( h>> 8);
    info[10] = (unsigned char)( h>>16);
    info[11] = (unsigned char)( h>>24);
 
    info[20] = (unsigned char)( sizeData    );
    info[21] = (unsigned char)( sizeData>> 8);
    info[22] = (unsigned char)( sizeData>>16);
    info[23] = (unsigned char)( sizeData>>24);
 
    f = fopen("img.bmp","wb");
    fwrite(file,1,sizeof(file),f);
    fwrite(info,1,sizeof(info),f);
 
 
    unsigned char bmppad[3] = {0,0,0};
 
    for(i=0; i<h; i++)
    {
        fwrite(buff+(w*(h-i-1)*bpp),bpp,w,f);
        fwrite(bmppad,1,(4-(w*bpp)%4)%4,f);
    }
    fclose(f);
 
    free(buff);
}
Добавлено через 3 минуты
погуглить побробуй initgr
0
sourcerer
19.11.2016, 12:43
  #5
 Комментарий модератора 
matveev1512, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.9 (порядок оформления кода).
0
0 / 0 / 0
Регистрация: 07.08.2016
Сообщений: 28
19.11.2016, 16:49  [ТС] 6
Ошибка в вашем коде
Миниатюры
Не получается воспроизвести пример из книги по графике на С  
0
34 / 33 / 21
Регистрация: 14.11.2016
Сообщений: 141
19.11.2016, 19:42 7
Перепиши тело max. В чем проблема.
0
0 / 0 / 0
Регистрация: 07.08.2016
Сообщений: 28
24.11.2016, 12:33  [ТС] 8
Каким образом переписать?
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
24.11.2016, 14:12 9
C
1
int length = (deltaX < deltaY ? deltaY : deltaX);
Я также хочу отметить, что вы пробуете скомпилировать программу как С++. Смените расширение файла на .c
0
24.11.2016, 14:12
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.11.2016, 14:12
Помогаю со студенческими работами здесь

Книги по компьютерной графике
Порекомендуйте книгу на русском в которой описываются векторы матрицы кватернионы,описывается как...

Windows phone: не получается воспроизвести GIF
Всем привет. Недавно начал делать приложение под Windows phone 8.1,но столкнулся с серьезной...

Не получается воспроизвести wav файл из ресурсов
В player.SoundLocation указывал путь к файлу на диске c. Работало. Добавил файл test.wav в...

Посоветуйте книги по примитивной графике
Может кто встречал книги или лучше электронные статьи или учебники, где подробно описаны техники...

MediaPlayer: не получается воспроизвести музыкальный файл из списка
Не получается воспроизвести музыкальный файл из списка. Алгоритм такой: записал все media файлы на...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru