DEMO.DESIGN
Frequently Asked Questions
 
оглавление | demo party в ex-СССР | infused bytes e-mag | новости от ib/news | другие проекты | письмо | win koi lat

следующий фpагмент (2)
- [97] Computer Graphics (2:5030/84) ----------------------------- SU.GRAPHICS - Msg : 10 of 16 From : Vladimir Gordeev 2:5054/4.8 13 Jan 95 21:48:00 To : All Subj : Объемные изображения -------------------------------------------------------------------------------- Hello All! Вот исходник пpогpаммы для создания "объемных" каpтинок. (все табуляции скушал голодный дедуля) Hа готовом pисунке будут две чеpных точки, нужно смотpеть на экpан так, чтобы эти точки совместились, после чего попытаться "навести pезкость". /* Программа построения "объемных" изображений * написана на Microsoft QuickC version 2.51 * * прошу прощения за стиль, программист из меня аховый ;) */ #include <graph.h> #include <math.h> #include <stdlib.h> void square (); void piramyd (); void Union (); void wave (); void sphere (); void hyper (); void round (); float x, y, z; main() { struct videoconfig vc; float colour, interval = 0.4; // interval определяет расстояние между опорными точками int i, j, ii, col, scale; int x1, x2, x3, x4, y1, y2; char key, flag[800]; while (1) { _clearscreen ( _GCLEARSCREEN ); printf ("\nChoose An Picture...\ \n--------------------\ \n1. Square\ \n2. Piramyd\ \n3. English Flag\ \n4. Waves\ \n5. Sphere\ \n6. Hyperbolic\ \n7. Round\ \n--------------------\ \n0. Exit To DOS\n"); while (1) { key = getch(); if ( key == '0' ) exit(0); if ( key >= '1' && key <= '7') break; } // установлю режим 320х200 16 цветов // можно ставить любой другой графический режим, но будет // достаточно долго рисоваться картинка if( ! _setvideomode( _MRES16COLOR ) ) exit( 1 ); _getvideoconfig( &vc ); scale = vc.numypixels / 2; for (j=0; j < (vc.numypixels-1) ; j++ ) { y = (j-vc.numypixels*0.5) / scale; for (i=0; i < (vc.numxpixels-1) ;i++ ) flag[i]=0; for (ii=0 ; ii < (vc.numxpixels-1) ; ii++ ) { if ( flag[ii] == 1) continue; i = ii; col = (rand() % vc.numcolors); _setcolor (col); while (i < vc.numxpixels) { flag[i] = 1; _setpixel (i, j); // эта процедура медленная :( x = (i - vc.numxpixels / 2); x = x / scale; x = x + interval / 2; switch (key) { case '1': square(); break; case '2': piramyd(); break; case '3': Union (); break; case '4': wave (); break; case '5': sphere (); break; case '6': hyper (); break; case '7': round (); break; } x = x + (interval / 2) - (0.15 * z); i = floor((x * scale) + (vc.numxpixels / 2) + .5001); } } } // поставлю опорные точки, куда "упирать" глаза ;) x1 = 0.5*(vc.numxpixels-interval*scale); x2 = 0.5*(vc.numxpixels-0.8*interval*scale); x3 = 0.5*(vc.numxpixels+0.8*interval*scale); x4 = 0.5*(vc.numxpixels+interval*scale); y1 = 0.05*interval*scale; y2 = 0.15*interval*scale; _setcolor ( (short)_BLUE ); _ellipse ( _GFILLINTERIOR, x1, y1, x2, y2 ); _ellipse ( _GFILLINTERIOR, x3, y1, x4, y2 ); getch (); _setvideomode( _DEFAULTMODE ); } } void square () { if ( x > -0.6 && x < 0.6 && y < 0.3 && y > -0.9) z = 0.3; else{ if ( x > -0.9 && x < 0.3 && y < 0.6 && y > -0.6) z = 0.2; else{ if ( x > -0.3 && x < 0.9 && y < 0.9 && y > -0.3) z = 0.1; else z = 0; }} } void piramyd () { float temp = sqrt (x*x + y*y); if ( temp < 0.9 ) z = 0.9 - temp; else z = 0; } void Union () { if ( fabs(x) < 0.2 || fabs(y) < 0.2 ) { z = 0.4; return; } if ( fabs( fabs(y) -0.7 * fabs(x)) < 0.2 ) { z = 0.25; return; } z = 0; } void wave () { z = 0.5 * cos ( 3 * y ) * sin (3 * x); } void sphere () { if ( sqrt (x*x + y*y) < 0.8 ) z = sqrt(0.64 - x*x - y*y); else z = 0; } void hyper () { float x2 = x*x; float y2 = y*y; if (fabs(x) < 0.6 && fabs(y) < 0.6 ) z = 0.7 - 0.3 * (x2/0.2 - y2/0.3); else z = 0; } void round () { if ( sqrt( (x-0.5)*(x-0.5) + (y-0.3)*(y-0.3) ) < 0.8 ) z = 0.6; else{ if ( sqrt( (x+0.2)*(x+0.2) + (y+0.2)*(y+0.2) ) < 0.7 ) z = 0.4; else{ if ( sqrt( (x+0.4)*(x+0.4) + (y-0.2)*(y-0.2) ) < 0.6 ) z = 0.2; else z = 0; }} }

Всего 1 фpагмент(а/ов) |пpедыдущий фpагмент (1)

Если вы хотите дополнить FAQ - пожалуйста пишите.

design/collection/some content by Frog,
DEMO DESIGN FAQ (C) Realm Of Illusion 1994-2000,
При перепечатке материалов этой страницы пожалуйста ссылайтесь на источник: "DEMO.DESIGN FAQ, http://www.enlight.ru/demo/faq".