Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2010, 19:00   #1
Nikolai2010
Пользователь
 
Регистрация: 10.03.2010
Сообщений: 15
По умолчанию Компьютерная графика на С++

В обшем,надо написать программу на языке си и встроенном в него ассемблере.
Нарисовать параллелограмм с помощью функций ассемблера. Затем
а) задать растяжение объекта попеременно по одной и другой диагонали, увеличив объект до размеров экрана
б)задать вращение объекта вокруг оси у, приняв за точку вращения одну из вершин.
Nikolai2010 вне форума Ответить с цитированием
Старый 05.06.2010, 20:22   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

халява ниже
NiCola999 вне форума Ответить с цитированием
Старый 05.06.2010, 22:05   #3
Nikolai2010
Пользователь
 
Регистрация: 10.03.2010
Сообщений: 15
По умолчанию

не понял вас
Nikolai2010 вне форума Ответить с цитированием
Старый 05.06.2010, 22:09   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Nikolai2010 Посмотреть сообщение
не понял вас
1. Читаем правила форума.
2. Если задаете вопрос(ы), то подразумеваться, что Вы уже имеете написанные код (его часть) / наработки.
3. За "спасибо" никто Вам не будет выполнять Ваше задание.
BOBAH13 вне форума Ответить с цитированием
Старый 05.06.2010, 22:14   #5
Nikolai2010
Пользователь
 
Регистрация: 10.03.2010
Сообщений: 15
По умолчанию

Есть две похожие программы,завтра скину коды. извините, я новичок!
Nikolai2010 вне форума Ответить с цитированием
Старый 06.06.2010, 11:47   #6
Nikolai2010
Пользователь
 
Регистрация: 10.03.2010
Сообщений: 15
По умолчанию

Нарисовать прямоугольный треугольник с прямым углом в верхнем правом углу. Реализовать вращение фигуры по спирали, а также реализовать приближение треугольника.

Решение:
#include <iostream.h>
#include <graphics.h>
#include <conio.h>
#include <math.h>
#include <dos.h>
void videobufer(void);
void lines(int);
void lines0(int);
void line1(int,int,int,int,int,int);
void line2(int,int,int,int,int);
void line3(int,int,int,int,int,int);
void line4(int,int,int,int,int);
main()
{int xp, xpp, xp1, yp1, xp2, yp2, xp3, yp3, xp4, yp4;
int xb,yb,x250=350,y200=200; //координата
int k=1,i,j,vr,m,r=190;
clrscr();
videobufer();
m=3;
for(vr=240;vr>=0;vr--)
{
xp1=x250+ceil(cos(vr*m*3.14/180)*r);
yp1=y200-ceil(sin(vr*m*3.14/180)*r);
xp2=x250+ceil(cos((vr+120)*m*3.14/180)*r);
yp2=y200-ceil(sin((vr+120)*m*3.14/180)*r);
xp3=x250+ceil(cos((vr+90)*m*3.14/180)*r);
yp3=y200-ceil(sin((vr+90)*m*3.14/180)*r);
xp4=x250+ceil(cos((vr+30)*m*3.14/180)*r);
yp4=y200-ceil(sin((vr+30)*m*3.14/180)*r);
xp4=x250+ceil(cos((vr-60)*m*3.14/180)*r/1.45);
yp4=y200-ceil(sin((vr-60)*m*3.14/180)*r/1.45);
xp4=x250+ceil(cos((vr+360)*m*3.14/180)*r/1.45);
yp4=y200-ceil(sin((vr+360)*m*3.14/180)*r/1.45);
//1 линия
if (xp1>xp2)
{if (yp1>yp2) line2(xp2,yp2,xp1,yp1,1);
else { xp=x250-xp2;
xp=x250+xp;
xpp=xp1-x250;
xpp=x250-xpp;
line3(xp,yp2,xpp,yp1,1,x250);}}
else {if (yp1>yp2)
{ xp=xp2-x250;
xp=x250-xp;
xpp=x250-xp1;
xpp=x250+xpp;
line1(xp,yp2,xpp,yp1,1,x250);}
else line4(xp2,yp2,xp1,yp1,1);}
//2 линия
if (xp2>xp3)
{if (yp2>yp3) line2(xp3,yp3,xp2,yp2,1);
else { xp=x250-xp3;
xp=x250+xp;
xpp=xp2-x250;
xpp=x250-xpp;
line3(xp,yp3,xpp,yp2,1,x250);}}
else {if (yp2>yp3)
{ xp=xp3-x250;
xp=x250-xp;
xpp=x250-xp2;
xpp=x250+xpp;
line1(xp,yp3,xpp,yp2,1,x250);}
else line4(xp3,yp3,xp2,yp2,1);}
//3 линия
if (xp3>xp4)
{if (yp3>yp4) line2(xp4,yp4,xp3,yp3,1);
else { xp=x250-xp4;
xp=x250+xp;
xpp=xp3-x250;
xpp=x250-xpp;
line3(xp,yp4,xpp,yp3,1,x250);}}
else {if (yp3>yp4)
{ xp=xp4-x250;
xp=x250-xp;
xpp=x250-xp3;
xpp=x250+xpp;
line1(xp,yp4,xpp,yp3,1,x250);}
else line4(xp4,yp4,xp3,yp3,1);}
//4 линия
if (xp4>xp1)
{if (yp4>yp1) line2(xp1,yp1,xp4,yp4,1);
else { xp=x250-xp1;
xp=x250+xp;
xpp=xp4-x250;
xpp=x250-xpp;
line3(xp,yp1,xpp,yp4,1,x250);}}
else {if (yp4>yp1)
{ xp=xp1-x250;
xp=x250-xp;
xpp=x250-xp4;
xpp=x250+xpp;
line1(xp,yp1,xpp,yp4,1,x250);}
else line4(xp1,yp1,xp4,yp4,1);}

delay(50);
//1 линия
if (xp1>xp2)
{if (yp1>yp2) line2(xp2,yp2,xp1,yp1,0);
else { xp=x250-xp2;
xp=x250+xp;
xpp=xp1-x250;
xpp=x250-xpp;
line3(xp,yp2,xpp,yp1,0,x250);}}
else {if (yp1>yp2)
{ xp=xp2-x250;
xp=x250-xp;
xpp=x250-xp1;
xpp=x250+xpp;
line1(xp,yp2,xpp,yp1,0,x250);}
else line4(xp2,yp2,xp1,yp1,0);}
//2 линия
if (xp2>xp3)
{if (yp2>yp3) line2(xp3,yp3,xp2,yp2,0);
else { xp=x250-xp3;
xp=x250+xp;
xpp=xp2-x250;
xpp=x250-xpp;
line3(xp,yp3,xpp,yp2,0,x250);}}
else {if (yp2>yp3)
{ xp=xp3-x250;
xp=x250-xp;
xpp=x250-xp2;
xpp=x250+xpp;
line1(xp,yp3,xpp,yp2,0,x250);}
else line4(xp3,yp3,xp2,yp2,0);}
//3 линия
if (xp3>xp4)
{if (yp3>yp4) line2(xp4,yp4,xp3,yp3,0);
else { xp=x250-xp4;
xp=x250+xp;
xpp=xp3-x250;
xpp=x250-xpp;
line3(xp,yp4,xpp,yp3,0,x250);}}
Nikolai2010 вне форума Ответить с цитированием
Старый 06.06.2010, 11:48   #7
Nikolai2010
Пользователь
 
Регистрация: 10.03.2010
Сообщений: 15
По умолчанию

else {if (yp3>yp4)
{ xp=xp4-x250;
xp=x250-xp;
xpp=x250-xp3;
xpp=x250+xpp;
line1(xp,yp4,xpp,yp3,0,x250);}
else line4(xp4,yp4,xp3,yp3,0);}
//4 линия
if (xp4>xp1)
{if (yp4>yp1) line2(xp1,yp1,xp4,yp4,0);
else { xp=x250-xp1;
xp=x250+xp;
xpp=xp4-x250;
xpp=x250-xpp;
line3(xp,yp1,xpp,yp4,0,x250);}}
else {if (yp4>yp1)
{ xp=xp1-x250;
xp=x250-xp;
xpp=x250-xp4;
xpp=x250+xpp;
line1(xp,yp1,xpp,yp4,0,x250);}
else line4(xp1,yp1,xp4,yp4,0);}
if (vr>120 && k==1) r--;else k=2;
if (vr<120 && k==2) r++;

}
getch();
return 0;}
void line1(int x1, int y1, int x2, int y2, int c, int t)
{ int x, y, dx, dy, d, xb, i, xx;
x=x1; y=y1;
dx=x2-x1;
dy=y2-y1;
d=-dx;
if (dx>dy)
for(;x<=x2;x++)
{xx=t-x;
xx=t+xx;
xb=ceil(xx/8);
i=(y-1)*80+xb;
if (c==1) lines(i); else lines0(i);
d=d+2*dy;
if (d>=0) {y++; d=d-2*dx;}}
else
for(;y<=y2;y++)
{xx=t-x;
xx=t+xx;
xb=ceil(xx/8);
i=(y-1)*80+xb;
if (c==1) lines(i); else lines0(i);
d=d-2*dx;
if (d<=0) {x++; d=d+2*dy;}}
}
void line2(int x1, int y1, int x2, int y2, int c)
{ int x, y, dx, dy, d, xb, i;
x=x1; y=y1;
dx=x2-x1;
dy=y2-y1;
d=-dx;
if (dx>dy)
for(;x<=x2;x++)
{xb=ceil(x/8);
i=(y-1)*80+xb;
if (c==1) lines(i); else lines0(i);
d=d+2*dy;
if (d>=0) {y++; d=d-2*dx;}}
else
for(;y<=y2;y++)
{xb=ceil(x/8);
i=(y-1)*80+xb;
if (c==1) lines(i); else lines0(i);
d=d-2*dx;
if (d<=0) {x++; d=d+2*dy;}}
}
void line3(int x1, int y1, int x2, int y2, int c, int t)
{ int x, y, dx, dy, d, xb, i,xx;
x=x2; y=y2;
dx=x1-x2;
dy=y1-y2;
d=-dx;
if (dx>dy)
for(;x<=x1;x++)
{xx=x-t;
xx=t-xx;
xb=ceil(xx/8);
i=(y-1)*80+xb;
if (c==1) lines(i); else lines0(i);
d=d+2*dy;
if (d>=0) {y++; d=d-2*dx;}}
else
for(;y<=y1;y++)
{xx=x-t;
xx=t-xx;
xb=ceil(xx/8);
i=(y-1)*80+xb;
if (c==1) lines(i); else lines0(i);
d=d-2*dx;
if (d<=0) {x++; d=d+2*dy;}}
}
void line4(int x1, int y1, int x2, int y2, int c)
{ int x, y, dx, dy, d, xb, i;
x=x2; y=y2;
dx=x1-x2;
dy=y1-y2;
d=-dx;
if (dx>dy)
for(;x<=x1;x++)
{xb=ceil(x/8);
i=(y-1)*80+xb;
if (c==1) lines(i); else lines0(i);
d=d+2*dy;
if (d>=0) {y++; d=d-2*dx;}}
else
for(;y<=y1;y++)
{xb=ceil(x/8);
i=(y-1)*80+xb;
if (c==1) lines(i); else lines0(i);
d=d-2*dx;
if (d<=0) {x++; d=d+2*dy;}}
}
void lines(int t)
{
asm{
mov bx,t
//вывод бита
mov al,11111111b
mov es:[bx],al
}
}
void lines0(int t)
{
asm{
mov bx,t
//вывод бита
mov al,00000000b
mov es:[bx],al
}
}
void videobufer(void)
{
asm{ //установка режима
mov ah,00h
mov al,12h
int 10h
//регистр адреса
mov dx,3ceh
mov al,5 //регистр режима
out dx,al
//регистр данных
mov dx,3cfh
mov al,0 //режим записи
out dx,al
//смещение видеобуфера
mov ax,0a000h
mov es,ax
//маска бита
mov dx,3ceh
mov al,8
out dx,al
inc dx
mov al,11111111b
out dx,al
//очистка регистра зашелки
mov bx,0
mov al,0
mov es:[bx],al
//установка регистра маски карты
mov dx,3c4h
mov al,2
out dx,al
inc dx
mov al,2 //color
out dx,al
}
}
Nikolai2010 вне форума Ответить с цитированием
Старый 06.06.2010, 11:49   #8
Nikolai2010
Пользователь
 
Регистрация: 10.03.2010
Сообщений: 15
По умолчанию

Реализовать падающее вращение буквы H

Исходный код



#include<graphics.h>
#include<conio.h>
#include<dos.h>
#include<stdlib.h>
#include<math.h>

struct point
{
float x,y,z;
};

point br[30];

void main()
{
int dr=DETECT,mod,index;
float y,z;
float cs,sn;
int xo=320,yo=100;
float angle=0.1;
initgraph(&dr,&mod,"");
br[0].x=0;
br[0].y=0;
br[0].z=0;

br[1].x=20;
br[1].y=0;
br[1].z=0;

br[2].x=20;
br[2].y=50;
br[2].z=0;

br[3].x=0;
br[3].y=50;
br[3].z=0;

br[4].x=20;
br[4].y=20;
br[4].z=0;


br[5].x=40;
br[5].y=20;
br[5].z=0

br[6].x=40;
br[6].y=30;
br[6].z=0;


br[7].x=20;
br[7].y=30;
br[7].z=0;



br[8].x=40;
br[8].y=0;
br[8].z=0;

br[9].x=60;
br[9].y=0;
br[9].z=0;

br[10].x=60;
br[10].y=50;
br[10].z=0;

br[11].x=40;
br[11].y=50;
br[11].z=0;



br[12].x=40;
br[12].y=0;
br[12].z=10;

br[13].x=60;
br[13].y=0;
br[13].z=10;

br[14].x=60;
br[14].y=50;
br[14].z=10;

br[15].x=40;
br[15].y=50;
br[15].z=10;




br[16].x=20;
br[16].y=20;
br[16].z=10;


br[17].x=40;
br[17].y=20;
br[17].z=10;


br[18].x=40;
br[18].y=30;
br[18].z=10;


br[19].x=20;
br[19].y=30;
br[19].z=10;




br[20].x=0;
br[20].y=0;
br[20].z=10;

br[21].x=20;
br[21].y=0;
br[21].z=10;

br[22].x=20;
br[22].y=50;
br[22].z=10;

br[23].x=0;
br[23].y=50;
br[23].z=10;









cs=cos(angle);
sn=sin(angle);

while(!kbhit())
{
setcolor(0);
moveto(xo+br[0].x,yo+br[0].y);
for(index=0;index<4;index++)
{
lineto(xo+br[index].x,yo+br[index].y);
}
lineto(xo+br[0].x,yo+br[0].y);
moveto(xo+br[4].x,yo+br[4].y);
for(index=4;index<8;index++)
{
// moveto(xo+br[5].x,yo+br[5].y);
lineto(xo+br[index].x,yo+br[index].y);
}

moveto(xo+br[8].x,yo+br[8].y);
for(index=8;index<12;index++)
{
lineto(xo+br[index].x,yo+br[index].y);
}
lineto(xo+br[8].x,yo+br[8].y);






moveto(xo+br[12].x,yo+br[12].y);
for(index=12;index<16;index++)
{
lineto(xo+br[index].x,yo+br[index].y);
}
lineto(xo+br[12].x,yo+br[12].y);



moveto(xo+br[16].x,yo+br[16].y);
for(index=16;index<20;index++)
{
// moveto(xo+br[5].x,yo+br[5].y);
lineto(xo+br[index].x,yo+br[index].y);
}




moveto(xo+br[20].x,yo+br[20].y);
for(index=20;index<24;index++)
{
lineto(xo+br[index].x,yo+br[index].y);
}
lineto(xo+br[20].x,yo+br[20].y);

moveto(xo+br[0].x,yo+br[0].y);
lineto(xo+br[20].x,yo+br[20].y);

moveto(xo+br[1].x,yo+br[1].y);
lineto(xo+br[21].x,yo+br[21].y);

moveto(xo+br[2].x,yo+br[2].y);
lineto(xo+br[22].x,yo+br[22].y);

moveto(xo+br[3].x,yo+br[3].y);
lineto(xo+br[23].x,yo+br[23].y);

//----------------
moveto(xo+br[8].x,yo+br[8].y);
lineto(xo+br[12].x,yo+br[12].y);

moveto(xo+br[9].x,yo+br[9].y);
lineto(xo+br[13].x,yo+br[13].y);


moveto(xo+br[10].x,yo+br[10].y);
lineto(xo+br[14].x,yo+br[14].y);


moveto(xo+br[11].x,yo+br[11].y);
lineto(xo+br[15].x,yo+br[15].y);


for(index=0;index<25;index++)
{
y=br[index].y*cs+br[index].z*sn;
z=-br[index].y*sn+br[index].z*cs;
br[index].y=y;
br[index].z=z;
}
// setcolor(14);

delay(50);
clrscr();
yo++;
}
}
Nikolai2010 вне форума Ответить с цитированием
Старый 06.06.2010, 11:50   #9
Nikolai2010
Пользователь
 
Регистрация: 10.03.2010
Сообщений: 15
По умолчанию

вот два примера. надо сделать по их подобию. помогите,пожалуйста!
Nikolai2010 вне форума Ответить с цитированием
Старый 06.06.2010, 12:04   #10
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

оберните этот УЖАС в тег CODE, хотя врятли кто-то будет здесь в этом разбираться. Советую обратиться в фриланс. Ужасный стиль
NiCola999 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компьютерная графика в паскале Kravec Паскаль, Turbo Pascal, PascalABC.NET 35 03.04.2015 15:36
Компьютерная графика на C# Mclaren Софт 0 02.06.2010 23:57
Компьютерная графика на Pascal Foxtrot_1 Помощь студентам 10 31.05.2010 18:22
компьютерная графика Черная тень Паскаль, Turbo Pascal, PascalABC.NET 6 11.01.2009 07:29