This is known as the vertex enumeration problem: to convert a polyhedron from a half-space representation (which is what you have—a set of inequalities) to a vertex representation. There are a number of algorithms in the literature for doing this efficiently in the general case. If you need to be as efficient as possible, you should look into one of these algorithms.
But with only six half-spaces known to form a bounded, non-degenerate hexahedron, brute force is probably just fine. Every vertex is at the intersection of three faces. Therefore, take each subset of three inequalities and compute the intersection point of the corresponding equations. (See below for how to do this.) If the intersection does not exist (e.g., two of the planes are parallel) or if the intersection point fails to satisfy any of the other three inequalities, then those three facets do not meet at a vertex; otherwise the point is one of the vertices. Repeat for each of the 6C3 = 20 combinations and you should end up with eight vertices.
To compute the intersection point of three inequalities, you can use some simple linear algebra. Take any three inequalities, for example:
2x + y + z <= 12
x + y >= 23
x >= 0
Write them as a matrix equation:
┌ ┐┌ ┐ ┌ ┐
│ 2 1 1 ││ x │ │ 12 │
│ ││ │ │ │
│ 1 1 0 ││ y │ = │ 23 │
│ ││ │ │ │
│ 1 0 0 ││ z │ │ 0 │
└ ┘└ ┘ └ ┘
(The matrix rows are the coefficients of x
, y
, and z
in each inequality.) If the matrix on the left is singular (i.e., the determinant is zero), there's no common intersection point. Otherwise, compute the solution by inverting the matrix:
┌ ┐ ┌ ┐-1┌ ┐
│ x │ │ 2 1 1 │ │ 12 │
│ │ │ │ │ │
│ y │ = │ 1 1 0 │ │ 23 │
│ │ │ │ │ │
│ z │ │ 1 0 0 │ │ 0 │
└ ┘ └ ┘ └ ┘
Any linear algebra library should be able to do this calculation for you, or—since this is 3D—you can use Cramer's Rule. Then check [x y z]
against the other three inequalities to determine if it is a vertex.