Pyth, 24 bytes
W<1Ks^R2JmtO2.0 3;cR@K2J Uses algorithm #2
W # while <1 # 1 < sKs # K := sum( ^R2 # map(lambda x:x**2, Jm 3 # J := map( , range(3)) tO2.0 # lambda x: random(0, 2.0) - 1 )): ; # pass R J # [return] map(lambda x: , J) c @K2 # x / sqrt(K)