![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Shadex |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 23.5.2005 Репутация: нет Всего: 1 |
Кто-нибудь знаком с алгоритмом "плавающего горизонта"? Мне необходимо нарисовать элипсоид вращения (формула (x*x)/(a*a)+(y*y)/(b*b)+(z*z)/(c*c)=1 при a=b), чтобы он был расположен в дальнем углу поля, при соотношении полуосей 2:2:1... у меня есть примерный код для рисования параболоида... подскажите если можете, что нужно в нем исправить, что бы нарисовать элипсоид! Или хотя бы объясните что происходит в этом коде, а то я только начал изучать С++ ... Заранее благодарен!
![]() #include <graphics.h> #include <math.h> #include <dos.h> #include <conio.h> float dx; float dz=0.1; float lengx=12; float lengz=12; float x0=-5, y0=2, z0=-8; float alpha=M_PI/4; float scale=33; float a; int gd,gm; int hor1[640]; int hor2[640]; int old_x, old_y; int i,g,tmx,resy,tmy,k,zxc; int round(float f) { return ((int)(f+0.5)); } float fy(float x, float z) { float a=2,b=2,c=1,y,d; d=(-(x*x)/(a*a)-(c-z)/©)*(b*b); if (d<0) y=0; else y=sqrt(d); return y; // } void func3d(int color_up,int color_down,int speed) { float x, z; int rx, ry; int rx0=0,ry0=0; char flag1=0; char flag2=0; i=1; zxc=0; for(z=z0;z<=z0+lengz;z+=dz) { zxc++; for(x=x0;x<=x0+lengx;x+=dx) { rx=round((x-x0)*scale+rx0); ry=round((fy(x,z)-y0)*scale+ry0); flag1=0; flag2=0; if(hor1[rx]<ry) { flag1=1; hor1[rx]=ry; } if(hor2[rx]>ry) { flag2=1; hor2[rx]=ry; } if(flag1) { i++; // if (i%(speed)==0) delay(1); putpixel(rx,480-ry,color_up); } else if(flag2) putpixel(rx,480-ry,color_down); //-------------------------------------------------------------------------- if((x>(lengx/2)-dx) && (zxc>1)) { if(old_x!=0 && old_x>350) line(old_x,old_y,rx,480-ry); old_x=rx; old_y=480-ry; } //-------------------------------------------------------------------------- if(x>(lengx/2)-dx) { tmx = rx; tmy = ry; } } rx0+=round(dz*cos(alpha)*scale); ry0+=round(dz*sin(alpha)*scale); } } void main(void) { gd=DETECT; initgraph( &gd, &gm, "" ); dx=1/(scale); settextstyle(GOTHIC_FONT, HORIZ_DIR, 3); outtextxy(151,100, "Hit any key to stop the process..."); outtextxy(430,420, "By Chuper Corp..."); settextstyle(0, HORIZ_DIR, 1); outtextxy(512,455, "1088/3 Group"); for (i=0;i<640;i++) hor1[i]=0; for (i=0;i<640;i++) hor2[i]=480; func3d(9,4,5); getch(); closegraph(); } |
|||
|
||||
kometa_triatlon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 384 Регистрация: 7.1.2005 Где: Киев Репутация: 2 Всего: 6 |
-------------------- Всё очень просто: сказки обман, Солнечный остров скрылся в туман, Замков воздушных не носит земля, Кто-то ошибся, ты или я. -------------- Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым. |
|||
|
||||
Shadex |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 23.5.2005 Репутация: нет Всего: 1 |
Всем спасибо, кто сюда зашел и посмотрел! Я уже все сделал!
![]() |
|||
|
||||
Doc_d0s |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 15.12.2004 Где: в кресле Репутация: 2 Всего: 3 |
Дай код плз, мне тожа с крафикой надо работать, и тожа фигуры вращения
![]() --------------------
Админ- это вождь Apache'й :) |
|||
|
||||
Shadex |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 23.5.2005 Репутация: нет Всего: 1 |
так ведь код написан сверху! весь! только это для С под DOS... но его легко можно переделать для Bilder нужно Convas сделать и все!
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |