All pastes #459297 Raw Edit

Untitled

public text v1 · immutable
#459297 ·published 2007-04-26 11:42 UTC
rendered paste body
diff --git a/plugins/wobbly.c b/plugins/wobbly.c
index 3a80f78..991b72c 100644
--- a/plugins/wobbly.c
+++ b/plugins/wobbly.c
@@ -41,7 +41,7 @@
 #define GRID_WIDTH  4
 #define GRID_HEIGHT 4
 
-#define MODEL_MAX_SPRINGS (GRID_WIDTH * GRID_HEIGHT * 2)
+#define MODEL_MAX_SPRINGS (2 * GRID_WIDTH * GRID_HEIGHT - GRID_WIDTH - GRID_HEIGHT)
 
 #define MASS 15.0f
 
@@ -1706,25 +1706,36 @@ bezierPatchEvaluate (Model *model,
 		     float *patchX,
 		     float *patchY)
 {
-    float coeffsU[4], coeffsV[4];
+    float coeffsU[GRID_WIDTH], coeffsV[GRID_HEIGHT];
     float x, y;
     int   i, j;
+    int nextBinom;
+    
+    nextBinom = 1;
+    for (i = 0; i < GRID_WIDTH; i++)
+    {
+	/*coeffsU[i] = coeffsU[i - 1] * u / (1 - u);
+	coeffsU[i] *= (float)(GRID_WIDTH - i) / i;*/
+	
+	coeffsU[i] = nextBinom * pow(1 - u, GRID_WIDTH - i - 1) * pow(u, i);
+	nextBinom = nextBinom * (GRID_WIDTH - i - 1) / (i + 1);
+    }
 
-    coeffsU[0] = (1 - u) * (1 - u) * (1 - u);
-    coeffsU[1] = 3 * u * (1 - u) * (1 - u);
-    coeffsU[2] = 3 * u * u * (1 - u);
-    coeffsU[3] = u * u * u;
-
-    coeffsV[0] = (1 - v) * (1 - v) * (1 - v);
-    coeffsV[1] = 3 * v * (1 - v) * (1 - v);
-    coeffsV[2] = 3 * v * v * (1 - v);
-    coeffsV[3] = v * v * v;
+    nextBinom = 1;
+    for (j = 0; j < GRID_HEIGHT; j++)
+    {
+	/*coeffsV[j] = coeffsV[j - 1] * v / (1 - v);
+	coeffsV[j] *= (float)(GRID_HEIGHT - j) / j;*/
+	
+	coeffsV[j] = nextBinom * pow(1 - v, GRID_HEIGHT - j - 1) * pow(v, j);
+	nextBinom = nextBinom * (GRID_WIDTH - j - 1) / (j + 1);
+    }
 
     x = y = 0.0f;
 
-    for (i = 0; i < 4; i++)
+    for (i = 0; i < GRID_WIDTH; i++)
     {
-	for (j = 0; j < 4; j++)
+	for (j = 0; j < GRID_HEIGHT; j++)
 	{
 	    x += coeffsU[i] * coeffsV[j] *
 		model->objects[j * GRID_WIDTH + i].position.x;