頂点ABCの三角形内で一様な乱数はどうすればいいでしょうか?
A new method to simulate the triangular distribution
前回と同じ文献。「Random vectors in the plane」の部分で触れられてます。この論文より先に知られていた方法らしく。
として、
なぜこれでOKなのかよく分かりませんが、2次元の場合でプロットしてみると確かに三角形になる……。ふむ。
Point2D randomPoint(double x1, double y1, double x2, double y2, double x3, double y3) { double u = Math.random(), v = Math.random(); double m1 = Math.min(u, v); double m2 = 1.0 - Math.max(u, v); double m3 = Math.max(u, v) - Math.min(u, v); double x = m1 * x1 + m2 * x2 + m3 * x3; double y = m1 * y1 + m2 * y2 + m3 * y3; return new Point2D.Double(x, y); }