📄 physics.h
字号:
#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 + -