Browse Source

[c] Updated noRotationOrReflection math

badlogic 9 years ago
parent
commit
ee9d202538
1 changed files with 11 additions and 14 deletions
  1. 11 14
      spine-c/src/spine/Bone.c

+ 11 - 14
spine-c/src/spine/Bone.c

@@ -128,29 +128,26 @@ void spBone_updateWorldTransformWith (spBone* self, float x, float y, float rota
 			break;
 			break;
 		}
 		}
 		case SP_TRANSFORMMODE_NOROTATIONORREFLECTION: {
 		case SP_TRANSFORMMODE_NOROTATIONORREFLECTION: {
-			float psx = SQRT(pa * pa + pc * pc), psy, prx;
-			float rx, ry, la, lb, lc, ld;
-			if (psx > 0.0001f) {
-				psy = ABS((pa * pd - pb * pc) / psx);
+			float s = pa * pa + pc * pc;
+			float prx, rx, ry, la, lb, lc, ld;
+			if (s > 0.0001f) {
+				s = ABS(pa * pd - pb * pc) / s;
+				pb = pc * s;
+				pd = pa * s;
 				prx = ATAN2(pc, pa) * RAD_DEG;
 				prx = ATAN2(pc, pa) * RAD_DEG;
 			} else {
 			} else {
-				psx = 0;
-				psy = SQRT(pb * pb + pd * pd);
-				prx = 90 - atan2(pd, pb) * RAD_DEG;
+				pa = 0;
+				pc = 0;
+				prx = 90 - ATAN2(pd, pb) * RAD_DEG;
 			}
 			}
-			cosine = COS_DEG(prx), sine = SIN_DEG(prx);
-			pa = cosine * psx;
-			pb = -sine * psy;
-			pc = sine * psx;
-			pd = cosine * psy;
 			rx = rotation + shearX - prx;
 			rx = rotation + shearX - prx;
 			ry = rotation + shearY - prx + 90;
 			ry = rotation + shearY - prx + 90;
 			la = COS_DEG(rx) * scaleX;
 			la = COS_DEG(rx) * scaleX;
 			lb = COS_DEG(ry) * scaleY;
 			lb = COS_DEG(ry) * scaleY;
 			lc = SIN_DEG(rx) * scaleX;
 			lc = SIN_DEG(rx) * scaleX;
 			ld = SIN_DEG(ry) * scaleY;
 			ld = SIN_DEG(ry) * scaleY;
-			CONST_CAST(float, self->a) = pa * la + pb * lc;
-			CONST_CAST(float, self->b) = pa * lb + pb * ld;
+			CONST_CAST(float, self->a) = pa * la - pb * lc;
+			CONST_CAST(float, self->b) = pa * lb - pb * ld;
 			CONST_CAST(float, self->c) = pc * la + pd * lc;
 			CONST_CAST(float, self->c) = pc * la + pd * lc;
 			CONST_CAST(float, self->d) = pc * lb + pd * ld;
 			CONST_CAST(float, self->d) = pc * lb + pd * ld;
 			break;
 			break;