 	because we need the normal too.
 
 Done using barycentric coordinates.
+The best reference for random selection I can find is
+	<http://www.cs.fsu.edu/~banks/courses/2003.3/homework/hw.04.html>.
 ###
 randomPointAndNormalInTriangle = (va, vb, vc, na, nb, nc) ->
-	beta = Math.random()
-	gamma = Math.random()
-	alpha = 1 - beta - gamma
+	alpha =
+		1 - Math.sqrt Math.random()
+	beta =
+		Math.random() * (1 - alpha)
+	gamma =
+		1 - alpha - beta
 
 	point = vecScale va, alpha
 	point.add vecScale vb, beta
 	point.add vecScale vc, gamma
 
-	normal = vecScale va, alpha
+	normal = vecScale na, alpha
 	normal.add vecScale nb, beta
 	normal.add vecScale nc, gamma
 

		verticesOwed -= nFacePoints

		for _ in [0...nFacePoints]
			[ point, normal ] = randomPointAndNormalInTriangle va, vb, vc, na, nb, nc
			vertices.push point
			normals.push normal

	console.log vertices.length
	console.log nVertices
	check vertices.length == nVertices

	[ vertices, normals ]
	verticesOwed = 0

	for face in geometry.faces
		[ va, vb, vc ] = faceVertices face
		[ na, nb, nc ] = face.vertexNormals

		area =
