|
![]() | 作者: 286 [unique]
![]() |
登录 |
#include "graphics.h" #include "conio.h" #include "stdio.h" #include "process.h" #include "stdlib.h" #include "dos.h" #include "math.h" #define UP 328 #define DOWN 336 #define LEFT 331 #define RIGHT 333 #define PGUP 329 #define PGDN 337 #define ESC 27 #define DELAY 1800 /*注意,不同主机速度不一样,可修改此值调整旋转速度*/ void InitGra(); void FillScr(); void Quit(); void DrawLine(int); void SdToEd(int i,int x,int y,int z,float a1,float a2,float a3,int mx,int my,int mz,int d); int GetKey(); void Move(float,float,float,int); void PutHz(int,int); struct ThreeD {/*8个点的三维坐标*/ int x; int y; int z; } Sd[8]={{-70, 70,-70},{-70, 70, 70}, {-70,-70,-70},{-70,-70, 70}, { 70, 70,-70},{ 70, 70, 70}, { 70,-70,-70},{ 70,-70, 70}}; struct TwoD {/*8个点的二维坐标*/ int x; int y; } Ed[8]; int i,j; int Ch; float a1=0.0,a2=0.0,a3=0.0; int mx=200,my=200,mz=100,d=1; void main() { InitGra();/*初始化图形*/ FillScr();/*填充屏幕背景*/ for(j=0;j<103;j++) { a1+=0.0628319,a2+=0.0628319,a3+=0.0628319; Move(a1,a2,a3,500);/*自动三维旋转*/ } for(;;){ Ch=GetKey();/*printf("%d ",Ch);*/ switch(Ch) {/*上下水平转;左右上下转;PGUP,PGDN前后转.*/ case ESC :Quit(); case UP :for(j=0;j<10;j++){a2+=0.628319;Move(a1,a2,a3,900);}delay(DELAY);break; case DOWN :for(j=0;j<10;j++){a2-=0.628319;Move(a1,a2,a3,900);}delay(DELAY);break; case LEFT :for(j=0;j<10;j++){a1+=0.628319;Move(a1,a2,a3,900);}delay(DELAY);break; case RIGHT :for(j=0;j<10;j++){a1-=0.628319;Move(a1,a2,a3,900);}delay(DELAY);break; case PGUP :for(j=0;j<10;j++){a3+=0.628319;Move(a1,a2,a3,900);}delay(DELAY);break; case PGDN :for(j=0;j<10;j++){a3-=0.628319;Move(a1,a2,a3,900);}delay(DELAY);break; } } } void Move(float a1,float a2,float a3,int time) { DrawLine(15); for(i=0;i<8;i++) SdToEd(i,Sd[i].x,Sd[i].y,Sd[i].z,a1,a2,a3,mx,my,mz,d); DrawLine(4); delay(time);/*printf("%d ",j);*/ } void SdToEd(int i,int x,int y,int z,float a1,float a2,float a3,int mx,int my,int mz,int d) { int xa,ya,za; int sx,sy; xa=cos(a1)*x-sin(a1)*z; za=sin(a1)*x+cos(a1)*z; x=cos(a2)*xa+sin(a2)*y; ya=cos(a2)*y-sin(a2)*xa; z=cos(a3)*za-sin(a3)*ya; y=sin(a3)*za+cos(a3)*ya; x=x+mx; y=y+my; z=z+mz; /*sx=d*x/z; sy=d*y/z;*/ Ed[i].x=x; Ed[i].y=y; } void DrawLine(int Color) { setcolor(Color); line(Ed[0].x,Ed[0].y,Ed[1].x,Ed[1].y); line(Ed[0].x,Ed[0].y,Ed[2].x,Ed[2].y); line(Ed[1].x,Ed[1].y,Ed[3].x,Ed[3].y); line(Ed[2].x,Ed[2].y,Ed[3].x,Ed[3].y); line(Ed[4].x,Ed[4].y,Ed[5].x,Ed[5].y); line(Ed[4].x,Ed[4].y,Ed[6].x,Ed[6].y); line(Ed[5].x,Ed[5].y,Ed[7].x,Ed[7].y); line(Ed[6].x,Ed[6].y,Ed[7].x,Ed[7].y); line(Ed[0].x,Ed[0].y,Ed[4].x,Ed[4].y); line(Ed[1].x,Ed[1].y,Ed[5].x,Ed[5].y); line(Ed[2].x,Ed[2].y,Ed[6].x,Ed[6].y); line(Ed[3].x,Ed[3].y,Ed[7].x,Ed[7].y); } void InitGra() { int GraphDriver=DETECT,GraphMode; /*registerbgidriver(EGAVGA_driver); registerbgifont(small_font); registerbgifont(gothic_font);*/ initgraph(&GraphDriver,&GraphMode,""); } void FillScr() { setfillpattern(3,5); bar(0,0,639,529); setfillstyle(1,15); bar(50,50,400,350); setcolor(1); line(55,55,395,55); line(55,55,55,345); line(55,345,395,345); line(395,55,395,345); setfillstyle(1,7); bar(450,50,600,350); setcolor(DARKGRAY); line(455,55,595,55); line(455,55,455,345); setcolor(WHITE); line(455,345,595,345); line(595,55,595,345); setfillstyle(1,7); bar(50,375,600,450); setfillpattern(9,1); bar(113,383,537,441); setcolor(14); settextstyle(4,0,6); outtextxy(220,380,"3-D stdio"); setcolor(1); settextstyle(2,0,6); outtextxy(470,100,"HotKey:"); setcolor(4); settextstyle(2,0,4); outtextxy(470,125,"Up :Left turn "); outtextxy(470,140,"Down :Right turn "); outtextxy(470,155,"Left :Left rotate"); outtextxy(470,170,"Right:Right rotate"); outtextxy(470,185,"PgUP :Fore turn "); outtextxy(470,200,"PgDn :Back turn "); outtextxy(470,215,"ESC :Quit "); setcolor(9); settextstyle(2,0,4); outtextxy(465,270,"copyright(c) by"); outtextxy(540,330,"1996.8.1"); PutHz(470,290); } void Quit() { closegraph(); exit(0); } int GetKey() { int Hig,Low,Ch; Ch=bioskey(0); Low=Ch&0x00ff; Hig=(Ch&0xff00)>>8; return(Low==0?Hig+256:Low); } void PutHz(int x,int y) { setcolor(14); settextstyle(4,0,4); outtextxy(480,290,"Unique"); } |
地主 发表时间: 10/17 09:49 |
![]() | 回复: jilian [jilian] ![]() |
登录 |
头都转大了 |
B1层 发表时间: 10/17 12:06 |
![]() | 回复: ceo_8008 [ceo_8008] ![]() |
登录 |
虽然那块东西有点粗糙 嘿嘿~~~286不知道什么是美女 但对程序却是十分的感谢 建议286课余时间去学美术欣赏 哈哈~~~~~ |
B2层 发表时间: 10/17 12:42 |
![]() | 回复: flyfalcon [flyfalcon] ![]() |
登录 |
同意啊,呵呵 |
B3层 发表时间: 10/18 19:27 |
![]() | 回复: baixiankai [baixiankai] ![]() |
登录 |
哈哈!~从TTY这里得知20CN,很就以前来过几次,想不到这么久没来变热闹啦 286 大哥 呕心励血 让大家看,大家应该尊重他啊!~(下面倒了一大片) 不过,写的这么长,别人一看这个长度就不敢恭维啦!~ 建议以后一天公布一点点,免得让人看了害怕 |
B4层 发表时间: 10/18 21:20 |
![]() | 回复: 286 [unique] ![]() |
登录 |
我这可是真刀真枪一点点算出来的,没任何图形驱动支持,所以是粗糙了点。 至于代码,如果你看过我系列程序,很多都是相同的,所以也不会感觉太长。 不过,说实在的,我看了长代码也头晕。 |
B5层 发表时间: 10/21 11:12 |
![]() | 回复: ceo_8008 [ceo_8008] ![]() |
登录 |
宏定义就那么一大堆 其实是很少的了 要搞工程的话・・・ |
B6层 发表时间: 10/21 12:00 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号