[cig-commits] r4884 - in long/3D/Gale/trunk/src/StGermain: . Discretisation/Shape/src

walter at geodynamics.org walter at geodynamics.org
Wed Oct 11 13:48:28 PDT 2006


Author: walter
Date: 2006-10-11 13:48:27 -0700 (Wed, 11 Oct 2006)
New Revision: 4884

Modified:
   long/3D/Gale/trunk/src/StGermain/
   long/3D/Gale/trunk/src/StGermain/Discretisation/Shape/src/ConvexHull.c
   long/3D/Gale/trunk/src/StGermain/Discretisation/Shape/src/ShapeClass.c
Log:
 r2941 at earth:  boo | 2006-10-11 13:42:49 -0700
  r2857 at earth (orig r3845):  AlanLo | 2006-10-10 00:23:04 -0700
  
  Fixing failing Shape tests on edda
  
  There are vector/matrix operations in here that were hardcoded to perform 3d operations even
  when the shape was set to 2d.
  
  So when the un-inited 3rd value in a vector is present, things go wacko.
  On edda, these values had a value of *nan*
  
  Fixed it to use only 2 elements of the vector when dim=2
  
  
 



Property changes on: long/3D/Gale/trunk/src/StGermain
___________________________________________________________________
Name: svk:merge
   - 1ef209d2-b310-0410-a72d-e20c9eb0015c:/cig:2940
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/trunk/StGermain:3844
   + 1ef209d2-b310-0410-a72d-e20c9eb0015c:/cig:2941
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/trunk/StGermain:3845

Modified: long/3D/Gale/trunk/src/StGermain/Discretisation/Shape/src/ConvexHull.c
===================================================================
--- long/3D/Gale/trunk/src/StGermain/Discretisation/Shape/src/ConvexHull.c	2006-10-11 20:48:25 UTC (rev 4883)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Shape/src/ConvexHull.c	2006-10-11 20:48:27 UTC (rev 4884)
@@ -342,8 +342,8 @@
 
 	// for the particle to be inside the shape, the dot product of its position vector with the shape face normal's must be non-positive
 	for( vertex_I = 0 ; vertex_I < self->vertexCount ; vertex_I++ ) {
-		StGermain_VectorSubtraction(tmpVector, point, self->vertexList[ vertex_I ], 3);
-		if( StGermain_VectorDotProduct(self->facesList[ vertex_I ], tmpVector, 3) > 0 ) {
+		StGermain_VectorSubtraction(tmpVector, point, self->vertexList[ vertex_I ], self->dim );
+		if( StGermain_VectorDotProduct(self->facesList[ vertex_I ], tmpVector, self->dim ) > 0 ) {
 			return False;
 		}
 	}

Modified: long/3D/Gale/trunk/src/StGermain/Discretisation/Shape/src/ShapeClass.c
===================================================================
--- long/3D/Gale/trunk/src/StGermain/Discretisation/Shape/src/ShapeClass.c	2006-10-11 20:48:25 UTC (rev 4883)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Shape/src/ShapeClass.c	2006-10-11 20:48:27 UTC (rev 4884)
@@ -251,19 +251,24 @@
 	/* Rotate Using Rotation Matrix */
 	rotatedCoord[ I_AXIS ] = 
 		  self->rotationMatrix[I_AXIS][0] * transformedCoord[0] 
-		+ self->rotationMatrix[I_AXIS][1] * transformedCoord[1]
-		+ self->rotationMatrix[I_AXIS][2] * transformedCoord[2];
+		+ self->rotationMatrix[I_AXIS][1] * transformedCoord[1];
 	
 	rotatedCoord[ J_AXIS ] = 
 		  self->rotationMatrix[J_AXIS][0] * transformedCoord[0] 
-		+ self->rotationMatrix[J_AXIS][1] * transformedCoord[1]
-		+ self->rotationMatrix[J_AXIS][2] * transformedCoord[2];
+		+ self->rotationMatrix[J_AXIS][1] * transformedCoord[1];
 	
 	rotatedCoord[ K_AXIS ] = 
 		  self->rotationMatrix[K_AXIS][0] * transformedCoord[0] 
-		+ self->rotationMatrix[K_AXIS][1] * transformedCoord[1]
-		+ self->rotationMatrix[K_AXIS][2] * transformedCoord[2];
-	memcpy( transformedCoord, rotatedCoord, sizeof(XYZ));
+		+ self->rotationMatrix[K_AXIS][1] * transformedCoord[1];
+
+	if ( self->dim > 2 ) {
+		rotatedCoord[ I_AXIS ] += self->rotationMatrix[I_AXIS][2] * transformedCoord[2];
+		rotatedCoord[ J_AXIS ] += self->rotationMatrix[J_AXIS][2] * transformedCoord[2];
+		rotatedCoord[ K_AXIS ] += self->rotationMatrix[K_AXIS][2] * transformedCoord[2];
+	}
+
+	memcpy( transformedCoord, rotatedCoord, sizeof(Coord));
+
 }
 
 void Stg_Shape_TranslateCoord( void* shape, Coord coord, Coord translatedCoord ) {



More information about the cig-commits mailing list