在三维空间中生成随机共面点

时间:2014-02-19 18:58:12

标签: java random geometry rounding-error determinants

我需要在三维空间中生成随机共面点。 平面方程是:

a*x + b*y + c*z = d

我通过随机化a,b,c和d来生成平面。 为了在这个平面上生成随机点,我使用以下代码:

    switch(random.nextInt(3))
    {
        case 0:
        {
            x = random.nextInt(length);
            y = random.nextInt(width);
            z = (d - (a*x) - (b*y))/c;
            break;
        }
        case 1:
        {
            x = random.nextInt(length);
            z = random.nextInt(height);
            y = (d - (a*x) - (c*z))/b;
            break;
        }
        case 2:
        {
            y = random.nextInt(width);
            z = random.nextInt(height);
            x = (d - (b*y) - (c*z))/a;
            break;
        }
    }

但是当我使用Cayley-Menger Determinant检查点是否是共面时,行列式决不会等于零(即点不是共面的)。

有趣的是,当我在x = 0平面上生成点时,Cayley-Menger行列式的工作完全正常!

这是一个舍入错误还是其他什么?

编辑:长度,宽度和高度是整数值。

0 个答案:

没有答案