public class Point3D  extends Matrix{

    public Point3D() 
    {
	super (1,4);
	set(4,1,1);
    }

    public Point3D(float xval, float yval, float zval)
    {
	super (4,1);
	set(1,1,xval);
	set(2,1,yval);
	set(3,1,zval);
	set(4,1,1);
    }

    public Point3D(float xval, float yval, float zval, float wval ) 
    {
	super (4,1);
	set(1,1,xval);
	set(2,1,yval);
	set(3,1,zval);
	set(4,1,wval);
	
	multiplyScalar(1/wval);
    }
    
    public Point3D(Matrix ref)
    {
    	super(4,1);
    	if (ref.rows == 4 && ref.cols == 1)
    	{
    		array = ref.array;
    		multiplyScalar(1/array[3]);
    	}
    }
    
    public final void setx(float newx)
    {
		array[0] = newx;
    }

    public final void sety(float newy)
    {
		array[1] = newy;
    }

    public final void setz(float newz)
    {
		array[2] = newz;
    }

    public final void setw(float neww)
    {
		array[3] = neww;
    }

    public final float x()
    {
	return array[0];
    }

    public final float y()
    {
	return array[1];
    }

    public final float z()
    {
	return array[2];
    }
    public String toString() {
        return new String(" ["+x()+", "+y()+", "+z()+"]");
    }
}
