Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Демонстрация





 

Внимание: будет работать только если Turbo Pascal установлен в каталог C:\TP и каталог C:\TP\BGI содержит необходимый файл egavga.bgi.

Program Space; {составил студент Тетуев Р., мат.фак. КБГУ} Uses Graph, Crt; Const RadOrb = 250 {радиус орбиты Земли}; RadSun = 70 {радиус Солнца}; RadGal = 100 {радиус галактики }; RadZem = 18 {радиус Земли }; Naklon = 0.2 {коэффициент наклона плоскости орбиты Земли}; PressZem = 0.65 {коэффициент сплющенности полюсов Земли}; Compress = 0.8 {коэффициент сжатия при переходе из }; {расширения режима VGA в режим CGA } Var ZemX, ZemY, UgMer, PixelY, DUgZem, UpDown, XRad, Grad, UgZem, PixelX, StAngle, Ua, Ub, ParallelY, Color, ZemPix, EndAngle, VisualPage, GrMode, GrError, GrDriver, i: Integer; Ugol, CompressZem, Expansion, DUgol, Projection, PolUgol: Real;BEGIN {установка графического режима и проверка возможных ошибок} GrDriver:= EGA; GrMode:= EGAHi; InitGraph(GrDriver, GrMode, 'C:\TP\BGI'); GrError:= GraphResult; If GrError<>GrOk then Halt; SetBkColor(Black); SetFillStyle(1, Yellow); {установка стиля заполнения и цвета Cолнцa} Ugol:= 0; DUgol:= 2*Pi/180; {орбитальное угловое смещение Земли} UgZem:= 0; DUgZem:= 14; {осевое угловое смещение Земли} {------------------------------------------------------------------} VisualPage:= 1; Repeat {цикл прерывается нажатием любой клавиши} SetVisualPage(1- (VisualPage mod 2)); {установка номера видимой видеостраницы} VisualPage:= VisualPage+1; {листание видеостраниц} SetActivePage(1 - (VisualPage mod 2)); {установка номера невидимой (активной) видеостраницы,} {используемой для построения смещенного изображения } ClearDevice; {очистка графического экрана} {--------------------------------------------------------------} {Рисование "расходящейся" галактики} RandSeed:=1; {исходное значение датчика случайных чисел} Expansion:=VisualPage/100; {cкорость расширения галактики} For i:= 1 to VisualPage do begin XRad:= Trunc(Expansion*RadGal*Random); {текущее расстояние от звезды до центра галактики} PolUgol:= 2*Pi*Random-VisualPage/30; {текущий центральный угол положения звезды галактики} PixelX:= 370+Trunc(XRad*cos(PolUgol+1.8)); {координаты} PixelY:= 250+Trunc(XRad*0.5*sin(PolUgol)); { звезды } PutPixel(PixelX, PixelY, White) {рисование звезды} end; {--------------------------------------------------------------} {Рисование мерцающих звезд} Randomize; {инициализация датчика случайных чисел} For i:=1 to 70 do PutPixel(Random(640),Random (350),White); {вспыхивающие звезды} {--------------------------------------------------------------} For i:= 1 to 100 do {Рисование орбиты} PutPixel(320+Round(RadOrb * cos((i+VisualPage/5)*Pi/50+0.3)), 160+Round(RadOrb*Naklon*sin((i+VisualPage/5)*Pi/50-Pi/2)),15); {--------------------------------------------------------------} PieSlice(310, 160, 0, 360, RadSun); {Рисование Солнца} {--------------------------------------------------------------} {Рисование Земли (ее параллелей и меридианов)} Ugol:= Ugol+DUgol; {угол поворота Земли относительно Солнца} Grad:= Round(180*Ugol/Pi) mod 360; {в рад.(Ugol) и в град.(Grad)} ZemX:= 320+Round(RadOrb*cos((Ugol+Pi/2+0.3))); { координаты } ZemY:=160+Round(RadOrb*Naklon*sin(Ugol)); {центра Земли} CompressZem:= 2.5-cos(Ugol+0.3); {коэффициент учета удаленности Земли от наблюдателя} ZemPix:= Round(RadZem*CompressZem); {текущий радиус Земли} UgZem:= UgZem+DUgZem; {угол поворота Земли относительно своей оси} For i:= 0 to 11 do { рисование меридианов } begin UgMer:= (UgZem+i*30) mod 360; If (90<UgMer) and (UgMer<270) {установка начального и конечного} then begin StAngle:= 90; EndAngle:= 270 end { углов дуги } else begin StAngle:= 270; EndAngle:= 90 end; {эллипса меридиана} Ua:= (Grad+220) mod 360; Ub:= (Grad+400) mod 360; {установка цветов рисования затененной и освещенной частей меридиана} Color:= LightBlue; If Ua<=Ub then if (Ua<UgMer) and (UgMer<Ub) then Color:= White; If Ua >Ub then if (Ua<UgMer) or (UgMer<Ub) then Color:= White; SetColor(Color); XRad:= round((ZemPix*cos(UgMer*Pi/180))); Ellipse(ZemX,ZemY,StAngle,EndAngle,abs(XRad),round(PressZem*ZemPix)); end; For i:= 2 to 7 do {рисование параллелей} begin XRad:= abs(Round(ZemPix*sin(i*Pi/9))); {большая полуось эллипса параллели} UpDown:= Round(ZemPix*PressZem*cos(i*Pi/9)); {высота параллели над плоскостью экватора} ParallelY:= ZemY+UpDown; {координата Y центра эллипса параллели} SetColor(LightBlue); Ellipse(ZemX, ParallelY, 0, 360, XRad, Round(Naklon*XRad)); {затененная часть параллели} SetColor(White); Ellipse(ZemX,ParallelY,Grad+220,Grad+400,XRad,Round(Naklon*XRad)); {освещенная часть параллели} end; {------------------------------------------------------------------} {Повторное рисование Cолнца, если оно ближе к наблюдателю, чем Земля} If CompressZem<2 then PieSlice(310, 160, 0, 360, RadSun); {------------------------------------------------------------------} RandSeed:= VisualPage mod 12; For i:= 1 to 250 do {Рисование протуберанцев} begin Projection:= (1-sqr(Random))*Pi/2; XRad:= RadSun+Round((20)*sin(Projection))-15; PolUgol:= 2 * Pi * Random+VisualPage/20; {PolUgol, XRad - полярные координаты протуберанца} PixelX:= 310 + Round(XRad * cos(PolUgol)); PixelY:= 160 + Round(Compress * XRad * sin(PolUgol)); PutPixel(PixelX, PixelY, LightRed) end; until KeyPressed END.

Date: 2015-07-24; view: 324; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию