00001 #ifndef _V3D_H
00002 #define _V3D_H
00003
00004 #include <math.h>
00005 #include <stdlib.h>
00006 #include <stdio.h>
00007
00008 #include "mathtools.h"
00009
00010 typedef struct {
00011 float x,y,z;
00012 } v3d;
00013
00014 typedef struct {
00015 int x,y;
00016 } v2d;
00017
00018
00019
00020
00021
00022
00023
00024 #define V3D_TO_V2D(v3,v2,width,height,distance) \
00025 { \
00026 int Xp, Yp; \
00027 if (v3.z > 2) { \
00028 F2I((distance * v3.x / v3.z),Xp) ; \
00029 F2I((distance * v3.y / v3.z),Yp) ; \
00030 v2.x = Xp + (width>>1); \
00031 v2.y = -Yp + (height>>1); \
00032 } \
00033 else v2.x=v2.y=-666; \
00034 }
00035
00036
00037
00038
00039
00040 #define Y_ROTATE_V3D(vi,vf,sina,cosa)\
00041 {\
00042 vf.x = vi.x * cosa - vi.z * sina;\
00043 vf.z = vi.x * sina + vi.z * cosa;\
00044 vf.y = vi.y;\
00045 }
00046
00047
00048
00049
00050 #define TRANSLATE_V3D(vsrc,vdest)\
00051 {\
00052 vdest.x += vsrc.x;\
00053 vdest.y += vsrc.y;\
00054 vdest.z += vsrc.z;\
00055 }
00056
00057 #define MUL_V3D(lf,v) {v.x*=lf;v.y*=lf;v.z*=lf;}
00058
00059 #endif