⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 physics.h

📁 一个3D的保龄球的源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef _PHYSICS
#define _PHYSICS

//#include "mymath.h"
#include "../3d/Matrix.h"
#include "../3d/Vector.h"
#include "../system/IMath.h"
//#include "Math3D.h"
#include "mymath.h"


//#define PHYSICS_DEBUG



/************************************************************************/
/* coefficient definition                                               */
/************************************************************************/

#define		NOCOLLISION				0
#define		COLLISION				1
#define		PENETRATING				-1
#define		CONTACT					2

#define		GRAVITY					-1050		//(-9.8/5)
#define		COLLISIONTOLERANCE		10		//0.1 
#define		VELOCITYTOLERANCE		64		//0.5
#define		CONTACTTOLERANCE		1

#define		COEFFICIENTOFRESTITUTION1			10		//1
#define		COEFFICIENTOFRESTITUTION2			165	//0.6
#define		COEFFICIENTOFRESTITUTIONGROUND		-10		//-0.3
#define     COEFFICIENTOFRESTITUTIONBOARD		50		//0.5

#define		PERCENT_GROUND_MOVEMENT_COEFFICIENT 115		//0.8

#define     PERCENT_ENERGY_BALL					128		//0.8
#define     PERCENT_ENERGY_TENPIN				120		//0.9
#define     PERCENT_ENERGY_BOARD				100		//102		//0.8
#define     PERCENT_ENERGY_GROUND				100		//1

#define     PERCENT_ENERGY_GROUND_VEL			120		
#define     PERCENT_ENERGY_GROUND_ANG			125
	
#define		PERCENT_ENERGY_BALL_VEL				125
#define		PERCENT_ENERGY_BALL_ANG				125

#define		PERCENT_ENERGY_TENPIN_VEL			125	
#define		PERCENT_ENERGY_TENPIN_ANG			120

#define		PERCENT_ENERGY_BOARD_VEL			110	
#define		PERCENT_ENERGY_BOARD_ANG			110

#define		FRICTIONCOEFFICIENT					21		//0.33

#define		DOFRICTION							true

#define		ATTENUATION_TENPIN_VEL				25
#define		ATTENUATION_TENPIN_ANG				12
#define		LIMIT_VELOCITY_X					10
#define		LIMIT_VELOCITY_Y					10
#define		LIMIT_VELOCITY_Z					10

#define		LIMIT_ANGVELOCITY_X					10
#define		LIMIT_ANGVELOCITY_Y					10
#define		LIMIT_ANGVELOCITY_Z					10


#define		SHAKING_VELOCITY_X					64
#define		SHAKING_VELOCITY_Y					64
#define		SHAKING_VELOCITY_Z					64

#define		SHAKING_ANGVELOCITY_X					640
#define		SHAKING_ANGVELOCITY_Y					640
#define		SHAKING_ANGVELOCITY_Z					640


/************************************************************************/
/* weight of the balls                                                  */
/************************************************************************/
const int WEIGHT_BALL[]={
684,//lightest,0
704,//light,1
705,//normal,2
713,//heavy,3
723,//heaviest,4
};
/*
const int WEIGHT_BALL[]={
602,//lightest,0
704,//light,1
803,//normal,2
904,//heavy,3
1004//heaviest,4
};


const int WEIGHT_BALL[]={
402,//lightest,0
504,//light,1
603,//normal,2
704,//heavy,3
804//heaviest,4
};	*/			

//-----------------simulation definition---------------------//
#define TOTAL_OBJECT 10+1//tenpins+ball

/************************************************************************/
/* shape and mass definition                                            */
/************************************************************************/
#define RADIUS_BALL				175//(12<<PHT_EXT)
#define RADIUS_TENPIN_UP		38//(3<<PHT_EXT)
#define RADIUS_TENPIN_DOWN		68//(6<<PHT_EXT)
#define HEIGHT_TENPIN_UP		195//(14<<PHT_EXT)
#define HEIGHT_TENPIN_DOWN		235//(18<<PHT_EXT)

#define RADIUS_TENPIN			((RADIUS_TENPIN_DOWN>RADIUS_TENPIN_UP)?RADIUS_TENPIN_DOWN:RADIUS_TENPIN_UP)

#define HEIGHT_TENPIN			(HEIGHT_TENPIN_UP+HEIGHT_TENPIN_DOWN)
#define KK						1
#define KK2						1


#define MASS_BALL				804	//6.6
#define MASS_TENPIN_UP			38	//0.3
#define MASS_TENPIN_DOWN		154	//1.2

#define CG_Z_BALL				RADIUS_BALL				
#define DIS_Z_BOTTOM2CG			(MASS_TENPIN_UP*(HEIGHT_TENPIN_UP/2+HEIGHT_TENPIN_DOWN)+MASS_TENPIN_DOWN*(HEIGHT_TENPIN_DOWN/2))/(MASS_TENPIN_UP+MASS_TENPIN_DOWN)
#define DIS_Z_UPCG2CG			(MASS_TENPIN_UP/2+HEIGHT_TENPIN_DOWN-DIS_Z_BOTTOM2CG)			
#define DIS_Z_DOWNCG2CG			(HEIGHT_TENPIN_DOWN/2-DIS_Z_BOTTOM2CG)

#define INERTIA_XX_BALL			((((((2*MASS_BALL*RADIUS_BALL))*RADIUS_BALL/5)/KK))>>PHT_EXT)			
#define INERTIA_YY_BALL			INERTIA_XX_BALL
#define INERTIA_ZZ_BALL			INERTIA_XX_BALL

#define INERTIA_TENPIN_UP_MR2	((MASS_TENPIN_UP*((RADIUS_TENPIN_UP*RADIUS_TENPIN_UP)))>>PHT_EXT)
#define INERTIA_TENPIN_UP_ML2	((MASS_TENPIN_UP*((HEIGHT_TENPIN_UP*HEIGHT_TENPIN_UP)))>>PHT_EXT)
#define INERTIA_TENPIN_DOWN_MR2	((MASS_TENPIN_DOWN*((RADIUS_TENPIN_DOWN*RADIUS_TENPIN_DOWN)))>>PHT_EXT)
#define INERTIA_TENPIN_DOWN_ML2	((MASS_TENPIN_DOWN*((HEIGHT_TENPIN_DOWN*HEIGHT_TENPIN_DOWN)))>>PHT_EXT)

#define INERTIA_XX_TENPIN_UP	(INERTIA_TENPIN_UP_MR2/4+INERTIA_TENPIN_UP_ML2/12)
#define INERTIA_YY_TENPIN_UP	INERTIA_XX_TENPIN
#define INERTIA_ZZ_TENPIN_UP	(INERTIA_TENPIN_UP_MR2/2)

#define INERTIA_XX_TENPIN_DOWN	(INERTIA_TENPIN_DOWN_MR2/4+INERTIA_TENPIN_DOWN_ML2/12)
#define INERTIA_YY_TENPIN_DOWN	INERTIA_XX_TENPIN
#define INERTIA_ZZ_TENPIN_DOWN	(INERTIA_TENPIN_DOWN_MR2/2)

#define INERTIA_XX_TENPIN		((INERTIA_XX_TENPIN_UP+INERTIA_XX_TENPIN_DOWN+((((MASS_TENPIN_UP*DIS_Z_UPCG2CG))*DIS_Z_UPCG2CG)>>PHT_EXT)+((((MASS_TENPIN_DOWN*DIS_Z_DOWNCG2CG))*DIS_Z_DOWNCG2CG)>>PHT_EXT))/KK2)		
#define INERTIA_YY_TENPIN		(INERTIA_XX_TENPIN)
#define INERTIA_ZZ_TENPIN		((INERTIA_ZZ_TENPIN_UP+INERTIA_ZZ_TENPIN_DOWN)/KK2)

//collision data
#define COLLISION_BALL_X		RADIUS_BALL
#define COLLISION_BALL_Y		COLLISION_BALL_X
#define COLLISION_BALL_Z		COLLISION_BALL_X

#define COLLISION_TENPIN_X		RADIUS_TENPIN_DOWN
#define COLLISION_TENPIN_Y		COLLISION_TENPIN_X
#define COLLISION_TENPIN_Z_UP	(HEIGHT_TENPIN_DOWN+HEIGHT_TENPIN_UP-DIS_Z_BOTTOM2CG)
#define COLLISION_TENPIN_Z_DOWN	(DIS_Z_BOTTOM2CG+45)

const int WIDTH_LANE=(7<<PHT_EXT);
const int WIDTH_BLOCK=(8<<PHT_EXT);
const int WIDTH_BLOCK_IN=WIDTH_BLOCK+2<<PHT_EXT;
const int GUTTER_POSITION_X=921;
const int GUTTER_POSITION_Z=(4<<PHT_EXT)/10;
const int GUTTER_WIDTH_X=((117/2)<<PHT_EXT)/10;

const int LENGTH_BLOCK=(212<<PHT_EXT);
const int LENGTH_BLOCK_BACK=LENGTH_BLOCK+2<<PHT_EXT;

// TO AMPLIFY THE DIRECTION Y SPEED ACCORDING TO THE SPEED
const int SPEED_Y_AMP_MAX=15;
const int SPEED_Y_AMP[SPEED_Y_AMP_MAX]={
	100,50,10,8,7,7,6,6,5,5,5,5,5,5,5	
};


/************************************************************************/
/* the definitions of the collision box                                 */
/************************************************************************/
/*
the 8 point of the block

							2___________6
						   /|          /|
						  / |    B    / |
						1/__|_ ______/ C|
						 |A |3______5|__|
						 |  /        |  /7
                         | / TENPINS | /
                         |/__________|/
                         0            4                  
*/

#define BLOCKS_POSITION_0_Y		(200<<PHT_EXT)
#define BLOCKS_POSITION_0_X		(-720)//(-58<<PHT_EXT)	
#define BLOCKS_POSITION_0_Z		0
#define BLOCKS_LENGTH			(12<<PHT_EXT)
#define BLOCKS_WIDTH			(12<<PHT_EXT)
#define BLOCKS_HEIGHT			(HEIGHT_TENPIN*3 )
	
#define BLOCK_POINT_0_X			BLOCKS_POSITION_0_X
#define BLOCK_POINT_0_Y			BLOCKS_POSITION_0_Y
#define BLOCK_POINT_0_Z			BLOCKS_POSITION_0_Z
			
#define BLOCK_POINT_1_X			BLOCK_POINT_0_X
#define BLOCK_POINT_1_Y			BLOCK_POINT_0_Y
#define BLOCK_POINT_1_Z			BLOCK_HEIGHT
			
#define BLOCK_POINT_2_X			BLOCK_POINT_0_X
#define BLOCK_POINT_2_Y			BLOCKS_POSITION_0_Y+BLOCKS_LENGTH
#define BLOCK_POINT_2_Z			BLOCK_POINT_1_Z
			
#define BLOCK_POINT_3_X			BLOCK_POINT_0_X
#define BLOCK_POINT_3_Y			BLOCK_POINT_2_Y
#define BLOCK_POINT_3_Z			BLOCK_POINT_0_Z
			
#define BLOCK_POINT_4_X			BLOCKS_POSITION_0_X+BLOCK_WIDTH
#define BLOCK_POINT_4_Y			BLOCK_POINT_0_Y
#define BLOCK_POINT_4_Z			BLOCK_POINT_0_Z
			
#define BLOCK_POINT_5_X			BLOCK_POINT_4_X
#define BLOCK_POINT_5_Y			BLOCK_POINT_0_Y

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -