Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > мой курсовой 8)


Автор: fantast 9.4.2007, 21:02
Тут недавно мне курсовой надо было писать по программированию, я смог взять вольную тему, и вот что из этого получилось..
просто хотелось показать, а если появятся какието идеи как это можно было бы сделать еще интереснее с удовольствием выслушал бы 8)
курсовой писался на си на turbo c++ 3.0  и только со стандартными заголовочными файлами. К сожалению там только 16 оттенков, поэтому иногда стороны сливаются с фоном.
крутить стрелками
esc - выход
v - переключение между видами

Автор: console 9.4.2007, 21:19
М-дя... Андрюха... похвально... но это я тебе уже говорил...
Народ, скачайте, действительно прикольно... ни каких те DirectX, чистый СИ...  smile 

Автор: JAnty 9.4.2007, 21:42
Неработает :(

Добавлено @ 21:46
Виста хулиганит, на ХР пошла, увидел только 3Д квадрат, а при нажатии на v он заливается белым цветом.

Автор: fantast 9.4.2007, 21:50
надо стрелками крутить 8)

Автор: console 9.4.2007, 21:52
Цитата(JAnty @  9.4.2007,  20:42 Найти цитируемый пост)
Виста хулиганит


Вот тебе и Виста )).... забыла о консоли напрочь  smile 

Автор: JAnty 9.4.2007, 21:53
Ухты, круто... smile  smile  smile

Добавлено через 59 секунд
Чистая математика, молодец!!!

Автор: Shadowlord 9.4.2007, 22:28
 smile 

Автор: S.A.G. 9.4.2007, 22:36
а относительно чего он крутиться?

Добавлено через 2 минуты и 10 секунд
приколько, понравилось

Автор: console 9.4.2007, 22:45
Судя по всему... относительно центра своей оси

Автор: JAnty 10.4.2007, 17:42
fantast, а чо за PO 313 ? а? 
Не Зелек случайно?

Автор: WERITAS 10.4.2007, 17:56
У меня банально не запустилось )) XP SP2.

Люди! Завязывайте вы с консольной графикой! Тут уже четвертую шейдерную модель придумали!! Консольная графика МЕРТВА!

Автор: betal 10.4.2007, 21:12
Цитата(JAnty @  9.4.2007,  21:42 Найти цитируемый пост)
Виста хулиганит,

Недавно видел на Инфокоме не смог не подписать коменты
user posted image

Добавлено @ 21:14
простите если немного не в тему. Но это меня улыбнуло smile 

Автор: fantast 10.4.2007, 22:01
Цитата
Не Зелек случайно?


не Минск ВГКС

Автор: JAnty 11.4.2007, 10:54
Цитата(betal @  10.4.2007,  21:12 Найти цитируемый пост)
Недавно видел на Инфокоме не смог не подписать коменты

Мне нравится когда все говорят что Виста хуже ХР, я внимательно наблюдал за тем как говорили что ХР хуже МЕ а потом перестали и забыли, что говорили... Но не пройдёт и года как у всех будет Виста и все замолчат(ИМХО). Я вообще непонимаю зачем так говорить. Зависть? Или хотят показать, что разбираются в виндах? Я не вижу не одной притензии к Висте.
ИМХО

Автор: JackYF 11.4.2007, 14:56
Цитата(JAnty @  11.4.2007,  10:54 Найти цитируемый пост)
Но не пройдёт и года как у всех будет Виста


ИМХО, не согласен. Для себя не вижу ни одной причины переходить на Висту. Меня и XP устраивает.

P.S. Может, топик отдельный откроем? или перенесем куда... а то здесь сплошной оффтопик сейчас получается...

Автор: vinter 11.4.2007, 15:40
Цитата(JackYF @  11.4.2007,  14:56 Найти цитируемый пост)
P.S. Может, топик отдельный откроем? или перенесем куда... а то здесь сплошной оффтопик сейчас получается...

 smile упаси боже от нового холивара, все это закончится холиваром Windows vs Linux, так что хорошь обсуждать, а если кому то нужно то в религиозных войнах тем про это много, просим вас тудаsmile smile 

Автор: ivashkanet 11.4.2007, 15:43
fantast, неплохо. Молодец.
А, до кучи, листинг выложить не хочешь?

Автор: JAnty 11.4.2007, 17:30
Цитата(JackYF @  11.4.2007,  14:56 Найти цитируемый пост)
Меня и XP устраивает.

Это временно, чем Виста не устраивает???
В дальнейшем всё будет под Висту, например в ней не работает RegCleaner, в холостую пашет, а инсталяторы типа *.msi  вообще не работают, потехоньку всё заточится под Висту!!!.

ЗЫ Да тема не по теме.

Автор: fantast 11.4.2007, 17:38
Цитата(ivashkanet @  11.4.2007,  15:43 Найти цитируемый пост)
А, до кучи, листинг выложить не хочешь?

выложить то можно, но тебе нужен этот гемор в нем копаться 8)
однако мне это льстит smile 

Автор: JackYF 11.4.2007, 17:40
Цитата(JAnty @  11.4.2007,  17:30 Найти цитируемый пост)
Цитата(JackYF @  11.4.2007,  14:56 Найти цитируемый пост)
Меня и XP устраивает.

Это временно, чем Виста не устраивает???


Не вижу логики. Я сказал, что меня устраивает XP. Пока меня устраивает XP, я даже пробовать не хочу что-то новое.
Тем более, что я прочитал немало обзоров про Висту и не нашел ничего нового, по крайней мере для себя.

Цитата(JAnty @  11.4.2007,  17:30 Найти цитируемый пост)
Это временно

Согласен. Поэтому уже перехожу на Линуха smile.

Автор: ivashkanet 11.4.2007, 17:43
fantast, лично мне нет  smile  smile 
Я говорю про "до кучи" ;-) Может кому в будущем понадобится. На то ведь форум и нужен ;-)

Автор: fantast 11.4.2007, 17:57
структура кода немного изменялась поэтому там есть некоторые излишества, которых можно легко и красиво избежать
но мне было просто впадлу 8)
вот
Код
  #include <graphics.h>
  #include <conio.h>
  #include <stdlib.h>
  #include <math.h>

  #define ki1 (*((buffer_point+((buffer_brink[i]).point_1-1))->z)*0.2+1)
  #define ki2 (*((buffer_point+((buffer_brink[i]).point_2-1))->z)*0.2+1)
  #define ki3 (*((buffer_point+((buffer_brink[i]).point_3-1))->z)*0.2+1)
  #define ki4 (*((buffer_point+((buffer_brink[i]).point_4-1))->z)*0.2+1)


  double pi=2*asin(1);

  int view=0;

  struct point
  {
    double* x;
    double* y;
    double* z;
  };

  struct index
  {
    int point_1;
    int point_2;
    int point_3;
    int point_4;
  };

  void  init        (point*,index*);
  void  close        (point*);
  void  render        (point*,index*);
  void  move        (point*,char);
  void  change        (double*,double*,int);
  void  add_point    (point*,double,double,double);
  index add_index    (int,int,int,int);
  char getch_user    (char,char);
  void cod        (char);

  void main()
  {
    point *buffer_point=0;

    buffer_point=(point*)calloc(8,sizeof(point));
    index buffer_brink[6];

    for(int i=0;i<8;i++)
    {
        (buffer_point+i)->x=(double*)malloc(sizeof(double));
        (buffer_point+i)->y=(double*)malloc(sizeof(double));
        (buffer_point+i)->z=(double*)malloc(sizeof(double));
    }

    init (buffer_point,buffer_brink);
    render(buffer_point,buffer_brink);

    char key='0';
    while(key!=27)
    {
        if(kbhit())
        {
            key=getch();
            if(kbhit()) {
                     char key2=getch();
                     key2=getch_user(key,key2);
                     if (key2) move(buffer_point,key2);
                     else      cod(key);
                     }
            else cod(key);
            render(buffer_point,buffer_brink);
        }
    }

    close(buffer_point);
  }

  void init(point *buffer_point,index *buffer_brink)
  {
    int driver=DETECT,
        mode  ;
    //detectgraph (&driver,&mode);
    initgraph   (&driver,&mode,"d:\\lucky\\turbo\\bgi\\");
    for (int i=0;i<16;i++)
    {
        setrgbpalette(i,i*4,i*4,i*4);
        setpalette(i,i);
    }
    setcolor(1);
    clrscr();
    outtextxy(300,240,"3.04.2007");
    outtextxy(240,260,"Davidchick Andrey PO 313");
    getch();


     add_point(buffer_point,  -1.0, 1.0,-1.0);
     add_point(buffer_point+1,-1.0, 1.0, 1.0);
     add_point(buffer_point+2, 1.0, 1.0, 1.0);
     add_point(buffer_point+3, 1.0, 1.0,-1.0);
     add_point(buffer_point+4,-1.0,-1.0,-1.0);
     add_point(buffer_point+5,-1.0,-1.0, 1.0);
     add_point(buffer_point+6, 1.0,-1.0, 1.0);
     add_point(buffer_point+7, 1.0,-1.0,-1.0);

     buffer_brink[0]=add_index(1,2,3,4);
     buffer_brink[1]=add_index(5,1,4,8);
     buffer_brink[2]=add_index(5,1,2,6);
     buffer_brink[3]=add_index(6,2,3,7);
     buffer_brink[4]=add_index(7,3,4,8);
     buffer_brink[5]=add_index(5,6,7,8);

  }

  void add_point(point *p,double x,double y,double z)
  {
    *(p->x)=x;
     *(p->y)=y;
      *(p->z)=z;
  }

  index add_index(int point_1,int point_2,int point_3,int point_4)
  {
    index buffer;

    buffer.point_1=point_1;
     buffer.point_2=point_2;
      buffer.point_3=point_3;
       buffer.point_4=point_4;

    return buffer;
  }

  void close(point *buffer_point)
  {
    free(buffer_point);
  }

  void render(point *buffer_point,index *buffer_brink)
  {
    clrscr();
    for(int i=0;i<6;i++)
    {

        if (!view)
        {
        moveto(*((buffer_point+((buffer_brink[i]).point_1-1))->x)*50*ki1+320,
               *((buffer_point+((buffer_brink[i]).point_1-1))->y)*50*ki1+240);
        lineto(*((buffer_point+((buffer_brink[i]).point_2-1))->x)*50*ki2+320,
               *((buffer_point+((buffer_brink[i]).point_2-1))->y)*50*ki2+240);
        lineto(*((buffer_point+((buffer_brink[i]).point_3-1))->x)*50*ki3+320,
               *((buffer_point+((buffer_brink[i]).point_3-1))->y)*50*ki3+240);
        lineto(*((buffer_point+((buffer_brink[i]).point_4-1))->x)*50*ki4+320,
               *((buffer_point+((buffer_brink[i]).point_4-1))->y)*50*ki4+240);
        lineto(*((buffer_point+((buffer_brink[i]).point_1-1))->x)*50*ki1+320,
               *((buffer_point+((buffer_brink[i]).point_1-1))->y)*50*ki1+240);
        }
        else
        {
        double dz=(*((buffer_point+((buffer_brink[i]).point_1-1))->z)/ki1
              +*((buffer_point+((buffer_brink[i]).point_2-1))->z)/ki2
              +*((buffer_point+((buffer_brink[i]).point_3-1))->z)/ki3
              +*((buffer_point+((buffer_brink[i]).point_4-1))->z)/ki4)/4;
        if (dz>0)
        {
            int mass[8];
            mass[0]=(int)(*((buffer_point+((buffer_brink[i]).point_1-1))->x)*50*ki1+320);
            mass[1]=(int)(*((buffer_point+((buffer_brink[i]).point_1-1))->y)*50*ki1+240);
            mass[2]=(int)(*((buffer_point+((buffer_brink[i]).point_2-1))->x)*50*ki2+320);
            mass[3]=(int)(*((buffer_point+((buffer_brink[i]).point_2-1))->y)*50*ki2+240);
            mass[4]=(int)(*((buffer_point+((buffer_brink[i]).point_3-1))->x)*50*ki3+320);
            mass[5]=(int)(*((buffer_point+((buffer_brink[i]).point_3-1))->y)*50*ki3+240);
            mass[6]=(int)(*((buffer_point+((buffer_brink[i]).point_4-1))->x)*50*ki4+320);
            mass[7]=(int)(*((buffer_point+((buffer_brink[i]).point_4-1))->y)*50*ki4+240);
            setcolor((int)(dz*14+1));
            setfillstyle(1,(int)(dz*14+1));
            fillpoly(4,mass);
        }


        }
    }

  }

  void move(point *buffer_point,char key)
  {
    for(int i=0;i<8;i++)
    {    switch (key)
        {
        case 1:change(((buffer_point+i)->z),((buffer_point+i)->y),-1);break;
        case 2:change(((buffer_point+i)->z),((buffer_point+i)->y), 1);break;
        case 3:change(((buffer_point+i)->x),((buffer_point+i)->z), 1);break;
        case 4:change(((buffer_point+i)->x),((buffer_point+i)->z),-1);break;
        }
    }

  }
  void change(double *x,double *y,int n)
  {

          double d=sqrt(pow(*x,2)+pow(*y,2));
          double dx=(*x)/(d);
          double dy=(*y)/(d);
          if(dy>=0) *x=(cos((double)(      acos((double)(dx))+(n*pi/180)))*d);
          if(dy<0)  *x=(cos((double)(2*pi- acos((double)(dx))+(n*pi/180)))*d);
          if(dy>=0) *y=(sin((double)(      acos((double)(dx))+(n*pi/180)))*d);
          if(dy<0)  *y=(sin((double)(2*pi- acos((double)(dx))+(n*pi/180)))*d);

  }

  char getch_user(char lo,char hi)
  {
    if(lo==0)
    {
    switch(hi)
    {
        case 72:return 1;
        case 80:return 2;
        case 75:return 3;
        case 77:return 4;
    }
    }
    return 0;
  }

  void cod(char key)
  {
  switch (key)
  {
  case 'v':view=!view;setcolor(1);break;
  }
  }


Автор: ivashkanet 11.4.2007, 18:03
fantast, довольно изящный код, во всяком случае на первый взгляд --- молодец ;-)

Автор: fantast 11.4.2007, 18:14
ivashkanet, пасибо, я старался

Автор: betal 11.4.2007, 18:57
Не fantast молодец. Для этого форум и нужен чтоб обмениваться опытом.


А насчет резкого переключения темы. Что есть то есть smile 

Автор: Валерия 12.4.2007, 08:15
Автор, давай зачетку smile

Прикольно получилось..!
А я вот школу прогуливала когда мы учили тригонометрию, теперь приходиться самой разбираться с этими косинусами)

З.Ы было бы прикольнее если бы был режим 1024х768 с 256 цветами (там есть такой)
И что бы квадрат плавно начинал крутиться, потом когда отпускаешь кнопку плавно останавливался..
И еще что бы можно было сразу нажатием двух стрелок крутить, скажем одновременно вправо и в верх...

Автор: NoNo 12.4.2007, 08:26
fantast, молодца

Автор: ivashkanet 12.4.2007, 08:29
Цитата(Валерия @  12.4.2007,  07:15 Найти цитируемый пост)
З.Ы было бы прикольнее если бы был режим 1024х768 с 256 цветами (там есть такой)
И что бы квадрат плавно начинал крутиться, потом когда отпускаешь кнопку плавно останавливался..
И еще что бы можно было сразу нажатием двух стрелок крутить, скажем одновременно вправо и в верх... 

Валерия, это задание для другой курсовой  smile  smile 

Автор: NoNo 12.4.2007, 08:32
Цитата(JAnty @ 11.4.2007,  10:54)
 Но не пройдёт и года как у всех будет Виста и все замолчат(ИМХО).

Поставь себе SUSE Linux...очень похож на Висту.....
Контора Гейтца, SP3 для XP обещают в скором времени выпустить.....

Добавлено через 1 минуту и 28 секунд
Точнее Виста напоминает SUSE Linux smile

Автор: ivashkanet 12.4.2007, 08:51
 smile 
Товарищи, 5 модераторов в разделе, а вы тут злостный оффтоп устраиваете 
 smile  smile  smile 

Автор: console 12.4.2007, 20:20
Цитата(Валерия @  12.4.2007,  07:15 Найти цитируемый пост)
З.Ы было бы прикольнее если бы был режим 1024х768 с 256 цветами (там есть такой)

Он такое пробовал сделать... не получилось с драйвером...

Автор: fantast 12.4.2007, 20:22
console, а тебе лишь бы все секреты мои раскрыть, утюг спаниас 8))

Автор: console 12.4.2007, 20:30
fantast, сам понимаешь от утюга с того же спаниаса слышу... и это не секрет... это была попытка подрубить IBM8514.BGI, которая окончилась неудачей...

Автор: Валерия 13.4.2007, 19:14
Цитата(console @ 12.4.2007,  20:30)
fantast, сам понимаешь от утюга с того же спаниаса слышу... и это не секрет... это была попытка подрубить IBM8514.BGI, которая окончилась неудачей...

У меня эта попытка закончилась тем же.
А почему так? Драйвер кривой?

Автор: likehood 13.4.2007, 20:54
Лучше уж svga256.bgi юзать.

P.S. fantast, а зачем в структуре point указатели используешь?

Автор: fantast 13.4.2007, 22:48
Цитата
P.S. fantast, а зачем в структуре point указатели используешь?


изначатьно я использовал не double а только float, ну а turbo c++ 3.0 float в структурах совсем не переваривает, вот я и изменил на указатели, чтоб он проживал
а потом оказалость что время от времени синусы  и косинусы могут давать сбой если в них засылать float а не double, вот я чтоб не мучаться просто все float разом и заменил на double, а менять  код - уже просто не хотелось тратить время..

Добавлено через 8 минут и 42 секунды
Цитата
А почему так? Драйвер кривой?


не знаю, он конечно и так старый.. все может быть
у меня лично видюха радион 9600, и на всех других компах на которых я ее наблюдал (скорее всего и у вас тоже) внизу экрана появляется черная полоса, а у меня ее нету..

вобщем мот тут дело в какихнить тонкостях, но что turbo c++ 3.0 самый кривой компилер который я когда-либо видел - это точно!

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

личто я когда включал закомментированную строку в своем коде (что в функции init) ничего не менялась, хотя эта функция выбирает драйвер совместимый с данным железом с наибольшим разрешением и палитрой.. а так как она ничего не меняла надо пологать, что с моим железом действительно ничего толкового из дров не подходит  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)