Vector vectorMinus(Vector pVectorA, Vector pVectorB) { Vector rtnVector = vectorNew(); rtnVector.x = pVectorA.x - pVectorB.x; rtnVector.y = pVectorA.y - pVectorB.y; rtnVector.z = pVectorA.z - pVectorB.z; return rtnVector; }
Vector vectorScale(Vector pVectorA, double pDoubleA) { Vector rtnVector = vectorNew(); rtnVector.x = pVectorA.x*pDoubleA; rtnVector.y = pVectorA.y*pDoubleA; rtnVector.z = pVectorA.z*pDoubleA; return rtnVector; }
Vector vectorNew(double pDoubleA, double pDoubleB, double pDoubleC) { Vector rtnVector = vectorNew(); rtnVector.x = pDoubleA; rtnVector.y = pDoubleB; rtnVector.z = pDoubleC; return rtnVector; }
Vector vectorAdd(Vector pVectorA, Vector pVectorB) { Vector rtnVector = vectorNew(); rtnVector.x = pVectorA.x + pVectorB.x; rtnVector.y = pVectorA.y + pVectorB.y; rtnVector.z = pVectorA.z + pVectorB.z; return rtnVector; }
Vector vectorNew(Vector pVectorA) { Vector rtnVector = vectorNew(); rtnVector.x = pVectorA.x; rtnVector.y = pVectorA.y; rtnVector.z = pVectorA.z; return rtnVector; }
DLLEX Vector *crossProduct(Vector *a, Vector *b) { // vector product double components[3]; // Use matrix method in order to compute the components of cross product components[2] = (a->components)[0]*(b->components)[1] - (a->components)[1]*(b->components)[0]; components[0] = (a->components)[1]*(b->components)[2] - (a->components)[2]*(b->components)[1]; components[1] = (a->components)[2]*(b->components)[0] - (a->components)[0]*(b->components)[2]; return vectorNew(components, 3); // Return new vector using calculated components }
void main() { int i; int start; double c1[3] = {22.5, 12.8, 80.2}; double c2[3] = {81.0, 5.0, 56.1}; Vector *a = vectorNew(c1, 3); Vector *b = vectorNew(c2, 3); start = clock(); for (i=0; i<100000; i++) { vectorAdd(a, b); vectorSub(a, b); vectorCompare(a, b); angle(a, b); vectorLength(a); vectorLength(b); dotProduct(a, b); crossProduct(a, b); } printf("%f ", (float)(clock()-start)/CLOCKS_PER_SEC); getchar(); }
node nexus2rootNode(char *buffer) // As of now, we configure to read from a file throughout...[but see the following note if you want to change] // Depending on how nexusLexer.l is configured, this routine either invokes a parser on STDIN or invokes a parser // based on the string pointed to by buffer. STDIN or string must contain a valid nexus file with a tree block and one // tree. It is parsed and a pointer to the root node of a tree structure is returned. { extern char* myinputptr; translVec=vectorNew(100); myinputptr=buffer; yyparse(); return gRootNode; }
DLLEX Vector *vectorCopy(Vector *a) { return vectorNew(a->components, a->demensions); // Just create a new vector, as it copies the components for us }