This is Linear3D.h in view mode; [Download] [Up]
/* Linear3D.h */
#import "Transformation3D.h"
#define L3D_X_AXIS 0
#define L3D_Y_AXIS 1
#define L3D_Z_AXIS 2
/*
these are constants to be used when calling rotate to choose an
axis.
*/
@interface Linear3D:Transformation3D
{
float coeff[4][3];
}
/*
coeff is the coefficients of the transformation matrix
and the translation.
*/
+new;
/* initializes coeff such that the transformation is the identity */
- operateOn:(vector3D *)theVect;
/*
will perform matrix multiplication with the vector3D pointed to by
theVect, using the first three rows of the array coeff as a 3D
matrix, and adding the fourth as a translation vector.
It will leave the result in the vector3D pointed to by theVect.
*/
- operateOn:(vector3D *)theVects howMany:(int)count;
/*
will perform the same operation as operateOn: to the array of vector3D
pointed to by theVects. It will leave the array itself modified.
*/
- concatBefore:aLinear;
- concatAfter:aLinear;
/*
These methods combine the receiver with another Linear3D transformation
in such a way the the receiver will be modified to perform both
operations in succession, by doing simple matrix multiplication.
concatBefore: will make the receiver a
Linear3D such that it performs the receiver's original operation first,
and aLinear's second. concatAfter: causes the receiver to perform it's
original operation after aLinear's.
*/
- rotation:(int)axis:(float)angle;
/*
causes the values in coeff to be set such that it represents a rotation
transformation of angle degrees, around the axis determined by axis
using the constants L3D_X_AXIS,L3D_Y_AXIS and L3D_Z_AXIS.
*/
- scaling:(float)x:(float)y:(float)z;
/*
causes the values in coeff to be set such that it represents a scaling
transformation,where x,y,z represent the scaling in each direction.
*/
- translation:(float)x:(float)y:(float)z;
/*
causes the values in coeff to be set such that it represents a
translation transformation.
*/
- (float)coefficient:(int)row column:(int)column;
/* returns coeff[row][column] */
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.