1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
float M_PI2 = M_PI/2.0 ; // Calcul de PI/2
float ta = (mass2[1]-mass1[1]) / (mass2[0]-mass1[0]) ; // Tangente angle Ax
float tc = (mass3[1]-mass2[1]) / (mass3[0]-mass2[0]) ; // Tangente angle Cx
float b = atan( (ta-tc)/(1+ta*tc) ) ; // Angle ABC
float c = atan( tc ) ; // Angle C
float ab = length(mass1, mass2) ; // Distance entre m1 et m2
float bc = length(mass2, mass3) ; // Distance entre m2 et m3
float accorner = sqrt(ab*ab+bc*bc) ; // Distance angle AC pour ABC valant PI/2
float acreal = length(mass1, mass3) ; // Distance reel de AC
if (acreal<accorner) { // Inversion pour avoir b entre -PI et +PI
if (b>0.0f) {
b -= M_PI ;
} else {
b += M_PI ;
}
}
float f = (abs(b)*1000000.0f) / (bc*bc) ; // Force de repulsion
mass3[5] += f * cos(c+M_PI2) ; // Application de la force en x
mass3[6] += f * sin(c+M_PI2) ; // Application de la force en y |
Partager