Electric field of uniformly charged tetrahedron How to calculate electric field of arbitrary tetrahedron with uniform charge density at arbitrary point?

I got:


*

*4 tetrahedron vertices

*total charge in Coulombs

*point at which I want to compute E field vector


The point can be outside or inside the tetrahedron. The charge density is uniform across tetrahedron volume (not surface!).
EDIT
This is not a homework. I'm writing a simulation program to simulate electric fields around and inside an object defined by its 3D mesh. The field to calculate is of all the protons in an object. It is assumed they are uniformly spread across entire volume. Imagine protons field only as if you removed all valence electrons from the metal, so each atom would have +1e charge.
I was thinking about subdividing the mesh to smaller chunks (tetrahedrons) and adding each tetrahedron fields at particular point. 
EDIT 2
I came up with a solution for the inner field part if outside field equation is known. The idea is to check if the point at which we want compute the field is inside the tetrahedron. If it's not then we compute field regularly, if it's inside then we choose a plane containing one tetrahedron's edge (or any two vertices) and that point. This plane will split the tetrahedron into two smaller ones. We then compute and add fields of both of them. In this case point can be considered to be outside of each smaller tetrahedron, or lying on their surfaces.
 A: Thanks for the edit.   Now that we know that you are doing this numerically, the situation changes.   
Your approach is fine.  Subdivide the tetrahedron into small volume elements, calculate the field for each, and add vectorially.  However, there is no need to actually make subdivisions, and they don't have to be tiny tetrahedra.  Instead you can traverse a three-dimensional cubical grid within the volume of the tetrahedron.  I'm not sure, but I think that would be much easier than trying to decimate the tetrahedron into smaller ones, unless you already have code that does that.
Start with a relatively coarse grid.  Then make it finer by say, a factor of two, and compare the field generated by those two calculations.  If your grid really was coarse, the two answers should be uncomfortably different.  Continue making the grid finer and finer each time comparing to the previous grid.  When the resulting grid stops changing to within some tolerable slop, stop.  Your grid is fine enough; there will be no further gain by continuing, but computation time would go up.
