Vectors operations are similar to Matrix operations, but there is usually a need for faster calculations.  On one of my jobs in the 1980s we had to create a digital system that could do calculations very rapidly and with the power supply had to be lighter and smaller then a similar electrical analog computer that used differential voltages. It was a struggle, literally, the differential analog based calculations were more accurate and could take a mechanical beating, especially if an electro-magnetic pulse went off near by, although I never understood why since the EMP would generate weird voltages.  Eventually we were able to add more features and got a buy off of the design.  But for most of the history of humans, there were no digital computers, and there a lot of natural analog computers, there are no natural digital computers.

If you want to read more about ball and integrator (mechanical) or electrical analog computers see this paper:

And did I ever use an Electrical Analog Computer, why yes I did.  If you want to see this Class project:

#### How do you get the X and Y from a vector?

When use the DirectMath vectors, the output is always uses the four components, so a dot product has the four products repeated 4 times.  Now how do you pick off the X or Y component?  Here is how I do it, this is using the Visual Studio 11 beta, not the Express version, use a Blank project and then add a source.cpp .  Then paste the following into the source.cpp file, run it and you should get the command environment shown at the bottom of this blog.

//Tested on Windows 8 with VS 11 Beta
#include <iostream>
#include "DirectXMath.h"
using namespace DirectX;
using namespace std;

ostream& operator<<(ostream& os, FXMVECTOR v)
{
XMFLOAT4 dest;
XMStoreFloat4(&dest, v);
os << "(" << dest.x<< ", " << dest.y << ", " << dest.z <<  ", " << dest.w << ")";
return os;
}

int main()
{
XMVECTOR aVector = XMVectorSet(1.0f, 2.0f,3.0f,4.0f);
XMVECTOR bVector = XMVectorSet(2.0f, 2.0f,1.0f,1.0f);
//Multiply 2 vectors
XMVECTOR Multiply2Vectors = XMVectorMultiply(aVector, bVector);
//Output the vectors to be multiplied
cout<<"aVector contains  "<< aVector <<endl;
cout<<"bVector contains "<< bVector <<endl;
//Multiply the 2 vectors and show the product or output
cout << "aVector multiplied bVector = " <<  Multiply2Vectors << endl;
//Get the X component of the vector
cout << "aVector multiplied bVector X = " <<  XMVectorGetX(Multiply2Vectors) << endl;
//Get the Y component of the vector
cout << "aVector multiplied bVector Y = " <<  XMVectorGetY(Multiply2Vectors) << endl;
system("PAUSE");
return 0;
}